例如:
struct Foo
{
int bar;
int (*baz)(int);
};
int testFunc(int x)
{
return x;
}
Foo list[] = {
{ 0, &testFunc },
{ 1, 0 } // no func for this.
};
在这个例子中,我宁愿将函数直接放入list []初始化器,而不是使用指向其他地方声明的函数的指针;它将相关的代码/数据保存在同一个地方。
有没有办法做到这一点?我尝试了我能想到的每一种语法,无法让它发挥作用。
答案 0 :(得分:4)
如果你的意思是:
Foo list[] = {
{ 0, int (*)(int x) { return x;} },
{ 1, 0 } // no func for this.
};
然后,不,这是不可能的。你在谈论anonymous functions,这是C ++尚未支持的东西(截至2011年8月)。
C ++ 0x正在添加对lambda functions的支持,这几乎是一样的,你的语法可能是这样的:
Foo list[] = {
{ 0, [](int x) { return x; } },
{ 1, 0 }
};
但是,如果您的目的仅仅是保持代码和数据非常接近,那么只需将它们保持在紧密靠近的位置(相同的C源文件,紧接数据之前的代码)。
答案 1 :(得分:0)
在C ++ 0x中,您可以使用lambdas将数据和代码保持在一起,但这会使代码难以阅读和维护。
答案 2 :(得分:0)
你要找的是anonymous functions,它在C或C ++中不存在(虽然Clang非正式地支持它,它将被添加到C ++ 0x中。)