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

时间:2011-08-03 08:31:49

标签: 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.
};

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

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

3 个答案:

答案 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中。)