是否可以直接在C++中的结构声明中指定函数?

Fly*_*179 5 c++ struct function-pointers

例如:

struct Foo
{
    int bar;
    int (*baz)(int);
};

int testFunc(int x)
{
    return x;
}

Foo list[] = {
    { 0, &testFunc },
    { 1, 0 } // no func for this.
};
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我宁愿将函数直接放入list []初始化器,而不是使用指向其他地方声明的函数的指针; 它将相关代码/数据保存在同一个地方.

有办法做到这一点吗?我尝试了我能想到的每一种语法,无法让它发挥作用.

pax*_*blo 4

如果你的意思是:

Foo list[] = {
    { 0, int (*)(int x) { return x;} },
    { 1, 0 } // no func for this.
};
Run Code Online (Sandbox Code Playgroud)

那么,不,这是不可能的。您正在谈论匿名函数,C++ 尚不支持(截至 2011 年 8 月)。

C++0x 正在添加对lambda 函数的支持,这几乎是相同的事情,您的语法可能类似于:

Foo list[] = {
    { 0, [](int x) { return x; } },
    { 1, 0                       }
};
Run Code Online (Sandbox Code Playgroud)

但是,如果您的目的只是使代码和数据保持接近,那么只需使它们保持接近(相同的 C 源文件,代码紧接在数据之前)。