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

唐纳德

我想用回调函数创建一个类,应该有可能使用外部函数作为回调,否则该类将默认分配一个成员函数作为回调。在这里查看我的代码示例:

#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关键字时,出现错误:

无法将类型“ void(Foo ::)()”中的“ Foo :: defaultCallback”转换为“ Foo :: CallbackType {aka std :: function}”类型

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

皮特·斯科特尼克(Piotr Skotnicki)
class Foo
{
public:
  using CallbackType = std::function<void(void)>;

  Foo() : Foo([this]{defaultCallback();}) {}

  explicit Foo(CallbackType callback) : _callback(callback) {}  

  void defaultCallback(void) {}

  CallbackType _callback;
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C++静态模板类成员作为朋友模板函数默认参数

来自分类Dev

使用C ++非静态成员函数作为回调和类范围问题

来自分类Dev

如何使用基类的数据成员作为派生类的构造函数?(在 C++ 中)

来自分类Dev

C ++使用模板类调用非静态成员函数

来自分类Dev

成员函数指针的decltype作为c ++ 11中的模板参数

来自分类Dev

成员函数指针的decltype作为c ++ 11中的模板参数

来自分类Dev

错误:在 C++ 中无效使用非静态成员函数

来自分类Dev

对于没有任何构造函数的类,在C ++ 11中自动生成的类成员函数

来自分类Dev

C ++,在类构造函数中传递非静态函数指针

来自分类Dev

具有静态成员的类的构造函数何时在C ++中运行?

来自分类Dev

在C ++中,将类的指针的默认构造函数作为map的值调用

来自分类Dev

C ++中的静态成员函数

来自分类Dev

C ++外部函数,带有指向函数作为参数的指针,在带有成员函数的类内部使用

来自分类Dev

使用自定义构造函数作为Objective C类成员初始化C ++类的实例吗?

来自分类Dev

使用 C++11 将指向成员函数的指针作为参数传递

来自分类Dev

非静态成员函数c++线程linux的无效使用

来自分类Dev

错误:非静态成员函数 C++ 的无效使用

来自分类Dev

当父类在 C++ 中没有默认构造函数时,如何在继承的类中使用构造函数?

来自分类Dev

具有私有构造函数的std :: map中的C ++ 11类作为Value

来自分类Dev

具有私有构造函数的std :: map中的C ++ 11类作为Value

来自分类Dev

静态成员函数中包含类的C ++类型

来自分类Dev

C ++中带有另一个模板类作为参数的构造函数

来自分类Dev

c ++ 11 Thread类如何使用类成员函数

来自分类Dev

c ++ 11 Thread类如何使用类成员函数

来自分类Dev

uninit_member:非静态类成员 m_wszParams 未在此构造函数中初始化,也未在它在 C++ 中调用的任何函数中初始化

来自分类Dev

C ++非静态成员函数的开销

来自分类Dev

为什么就地成员初始化在C ++ 11中使用副本构造函数?

来自分类Dev

我使用C ++引用函数或数据成员吗?(必须调用对非静态成员函数的引用)

来自分类Dev

来自静态成员函数的sizeof C ++类

Related 相关文章

  1. 1

    C++静态模板类成员作为朋友模板函数默认参数

  2. 2

    使用C ++非静态成员函数作为回调和类范围问题

  3. 3

    如何使用基类的数据成员作为派生类的构造函数?(在 C++ 中)

  4. 4

    C ++使用模板类调用非静态成员函数

  5. 5

    成员函数指针的decltype作为c ++ 11中的模板参数

  6. 6

    成员函数指针的decltype作为c ++ 11中的模板参数

  7. 7

    错误:在 C++ 中无效使用非静态成员函数

  8. 8

    对于没有任何构造函数的类,在C ++ 11中自动生成的类成员函数

  9. 9

    C ++,在类构造函数中传递非静态函数指针

  10. 10

    具有静态成员的类的构造函数何时在C ++中运行?

  11. 11

    在C ++中,将类的指针的默认构造函数作为map的值调用

  12. 12

    C ++中的静态成员函数

  13. 13

    C ++外部函数,带有指向函数作为参数的指针,在带有成员函数的类内部使用

  14. 14

    使用自定义构造函数作为Objective C类成员初始化C ++类的实例吗?

  15. 15

    使用 C++11 将指向成员函数的指针作为参数传递

  16. 16

    非静态成员函数c++线程linux的无效使用

  17. 17

    错误:非静态成员函数 C++ 的无效使用

  18. 18

    当父类在 C++ 中没有默认构造函数时,如何在继承的类中使用构造函数?

  19. 19

    具有私有构造函数的std :: map中的C ++ 11类作为Value

  20. 20

    具有私有构造函数的std :: map中的C ++ 11类作为Value

  21. 21

    静态成员函数中包含类的C ++类型

  22. 22

    C ++中带有另一个模板类作为参数的构造函数

  23. 23

    c ++ 11 Thread类如何使用类成员函数

  24. 24

    c ++ 11 Thread类如何使用类成员函数

  25. 25

    uninit_member:非静态类成员 m_wszParams 未在此构造函数中初始化,也未在它在 C++ 中调用的任何函数中初始化

  26. 26

    C ++非静态成员函数的开销

  27. 27

    为什么就地成员初始化在C ++ 11中使用副本构造函数?

  28. 28

    我使用C ++引用函数或数据成员吗?(必须调用对非静态成员函数的引用)

  29. 29

    来自静态成员函数的sizeof C ++类

热门标签

归档