创建一个将func传递给构造函数的Foo对象在这个例子中工作得很好:
int func(int a) { return a; }
struct Foo {
Foo( int (*func_ptr)(int) ) {};
};
Foo bar(func);
但是,尝试在另一个类中创建Foo对象不会:
class ThisIsCrap {
Foo doesntWork(func);
};
如何在类中创建Foo对象,就像我可以在类外面创建一样?在不编译的位上,错误是:“无法解析类型'func'”
提前致谢。
答案 0 :(得分:0)
1,000感谢Kerrek SB。
class ThisWorks {
Foo* working;
ThisWorks() {
working = new Foo(func);
}
}
答案 1 :(得分:0)
您可以使用默认成员初始化程序(DMI)为非静态类数据成员提供初始化程序:
int func(int a) { return a; }
struct Foo { Foo(int (*)(int)) {}; };
class ThisIsGreat {
Foo one_way = func; // DMI with copy-initialization syntax
Foo another_way{func}; // DMI with list-initialization syntax
};
当然你也可以使用构造函数:
class ThisIsSane {
ThisIsSane()
: third_way(func) // constructor-initializer list
{}
Foo third_way;
};
对于学生的语言律师说明:在C ++ 11中,ThisIsGreat
不是聚合;在C ++ 14中它是。