这里很好地描述了如何通过指针调用成员函数: http://www.newty.de/fpt/functor.html
但是仿函数需要得到 2 个参数:指向对象的指针和指向成员函数的指针:
TSpecificFunctor(TClass* _pt2Object, void(TClass::*_fpt)(const char*))
{ pt2Object = _pt2Object; fpt=_fpt; }
调用:
(*pt2Object.*fpt)(string);
是否可以像 C 风格那样传递单个参数:
func() -- call
func -- function pointer
为什么 obj.method 不是完整的指向类成员的指针?
最佳答案
object.*ptmf
语法不会创建中间对象。它没有任何意义,被语言所禁止。您必须立即调用访问指向成员函数的指针的结果。
您可以使用 std::bind
显式创建这样的对象,它将 ptmf 解释为仿函数对象,并使隐式的 this
参数显式化。
auto fn = std::bind( ptmf, object, std::placeholders::_1 );
std::function< void( const char * ) > stdfn = fn;
fn( "foo" ); // equivalent to object.*ptmf( "foo" );
请注意,此功能是 C++11 中的新功能。尽管 C++03 TR1 有 function
和 bind
,但它们不会在 ptmf 上执行此转换。 (普通 C++03 可以使用 std::mem_fn
和 std::bind1st
完成这项工作,但它们使用起来非常痛苦并且已被弃用。)
关于c++ - 是否可以在 C++ 中将指向类成员的指针作为单个参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11341028/