我在定义可以指向任何成员函数(不仅仅是指定类的成员函数)的函数指针时遇到了困难。
例如,C++ 强制我指定指向成员函数的函数指针将指向的类:
typedef void (Foo::*MyFunctionPointerTypeName)(int);
但是如果这个函数指针要指向的类成员函数不在Foo
中怎么办?那么我将如何写这个,或者我可以使用什么替代方法?
更新:对于任何想快速回答如何使用 C++11 std::function
来完成此操作的人(因为关于该主题的教程似乎假设很多读者):
定义(来自 Foo
):
std::function<void(int)> _fun;
绑定(bind)(来自任何类):
objFoo->_fun = std::bind(&SomeOtherClass::memberFunction,
this, std::placeholders::_1);
调用它(从 Foo
中)
if(_fun != nullptr) _fun(42);
如果您的函数没有参数,您可以删除 std::placeholders::_1
。如果您的函数有两个参数,您还需要添加 std::placeholders::_2
作为std::bind
的参数.三参数、四参数等也是如此。
最佳答案
您不能编写可以指向任何 类成员的成员指针。请记住:成员指针的参数之一是类实例本身。指针是有类型的,因此其参数的类型在很大程度上是指针类型的一部分。
不过,您可以使用std::function
,它可以存储各种可调用对象。您实际如何调用它(即:您给它什么参数)取决于您的需要,因为您还没有解释您要做什么。
关于c++ - 从一个类到任何类的成员函数的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14316348/