我想實作一個成員函式如下:
void X() {}
class Foo
{
static void(*Bar)() = X;
};
這不會編譯:
錯誤:類內初始化非整數型別的靜態資料成員“void (* Foo::Bar)()”需要“constexpr”
我知道這是不合法的。我必須在類范圍之外初始化 Bar 或使其“行內靜態”。問題是后者是 C 17 功能,我必須使用 C 11(BCC32X 限制)。所以我的問題是:有沒有辦法在同一條線上做到這一點?也許使它成為常量?我知道我們可以做到這一點(來源)...
class Foo
{
static int const i = 42;
}
但是我們能以某種方式將它應用到函式中嗎?
PD:我知道我的問題有無限的解決方案,但到目前為止,我所看到的最終都依賴于我無法使用的后來的 C 功能。
uj5u.com熱心網友回復:
從 C 11 開始,您可以使用constexpr在類宣告中初始化非整數/列舉型別的靜態成員。
正如下面的@paddy 評論,這使得Barconst 所以只有當你不打算修改它時它才是一個可行的解決方案,你在問題的代碼中沒有做什么。
[演示]
#include <iostream> // cout
void X() {
std::cout << "Blah\n";
}
struct Foo {
static constexpr void(*Bar)() = X;
};
int main() {
Foo::Bar();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/432111.html
上一篇:在哪里使用右值作為函式引數?
下一篇:如何在鏈表C 中的函式內傳遞值
