将函数作为参数传递给不在类中工作

时间:2017-03-15 09:29:14

标签: c++ function pointers

创建一个将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'”

提前致谢。

2 个答案:

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