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不是完全指向类成员的指针?
语法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)
请注意,此功能是C++ 11中的新功能.虽然C++ 03 TR1具有function和bind,但它们不会在ptmf上执行此转换.(平原C++中03可以做的工作std::mem_fn和std::bind1st,但他们是非常痛苦的使用,并已被弃用.)