首页 文章

C 11:在类构造函数中使用非静态成员函数作为默认参数

提问于
浏览
3

我想创建一个带回调函数的类,应该可以使用外部函数作为回调,或者默认情况下类会将成员函数指定为回调 . 在这里查看我的代码示例:

#include <functional>

class Foo
{
public:
  typedef std::function<void(void)> CallbackType;

  Foo(CallbackType callback = defaultCallback): _callback(callback) {}

  // code sample works only if this function is defined static:
  static void defaultCallback(void) {}

  CallbackType _callback;
};

void externCallback(void) {}

int main()
{
  Foo fooExtern(externCallback);
}

如代码中所述,仅当'defaultCallback'被定义为static时,该示例才有效 . 不使用static关键字时,我收到错误:

无法将'Foo :: defaultCallback'从类型'void(Foo ::)()'转换为'Foo :: CallbackType '

但是,我也希望能够将此类用作父类,并且我想将'defaultCallback'定义为虚拟(在将其定义为静态时,这是不可能的) . 有没有人建议如何在不使用静态成员函数作为默认构造函数参数的情况下使代码工作?

1 回答

  • 3
    class Foo
    {
    public:
      using CallbackType = std::function<void(void)>;
    
      Foo() : Foo([this]{defaultCallback();}) {}
    
      explicit Foo(CallbackType callback) : _callback(callback) {}  
    
      void defaultCallback(void) {}
    
      CallbackType _callback;
    };
    

相关问题