C ++函子模板

| 给定以下类,该类仅将内部函子
f
映射到稍后要运行的函数:
class A {
private:
   int (A::*f)(int);
   int foo(int x) { return x; }
   int bar(int x) { return x*2; }
public:
   explicit A(bool foo=true) { f = foo ? &A::foo : &A::bar; }
   int run(int x) { return (this->*f)(x); }
};
现在说我还有另一堂课,
B
class B {
public:
   int foo(int) { return x*x; }
};
和功能
foo
int foo(int x) { return 0; }
我知道不可能分配
A
并运行
B::foo
foo
,因为它们的原型不同:
int (A::*)(int)
int (B::*)(int)
int (*)(int)
。 我要问的是,他们有什么办法使
A::f
模板化,以使它们中的任何一个都可以?     
已邀请:
我不确定您要达到的目标,但您可能需要研究以下内容: Boost.Function-可以包装任何类型的可调用对象 Boost.Bind-可用于将成员函数绑定到实例     
通常,对于这种工作,请使用
std::
/
boost::
/
std::tr1
::function<int(int)>
。它可以使用具有正确签名的任何函数对象(包括指针)。您可以创建使用
bind
调用成员函数的函数对象,该软件包在同一软件包中可用。     

要回复问题请先登录注册