是否可以将指向类的成员作为C++中的单个参数传递?

leg*_*ron 2 c++ pointers function-pointers class

这里有很好的描述如何通过指针调用成员函数:http: //www.newty.de/fpt/functor.html

但是仿函数需要获得2个参数:指向对象的指针和指向成员函数的指针:

TSpecificFunctor(TClass* _pt2Object, void(TClass::*_fpt)(const char*))
{ pt2Object = _pt2Object;  fpt=_fpt; }
Run Code Online (Sandbox Code Playgroud)

呼叫:

(*pt2Object.*fpt)(string);
Run Code Online (Sandbox Code Playgroud)

是否可以像C风格一样传递单个参数:

func() -- call
func -- function pointer
Run Code Online (Sandbox Code Playgroud)

为什么obj.method不是完全指向类成员的指针?

Pot*_*ter 7

语法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" );
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/ds24F

请注意,此功能是C++ 11中的新功能.虽然C++ 03 TR1具有functionbind,但它们不会在ptmf上执行此转换.(平原C++中03可以做的工作std::mem_fnstd::bind1st,但他们是非常痛苦的使用,并已被弃用.)