C++函子模板
C++ functor templates
本文关键字:C++ 更新时间:2023-10-16
给定以下类,它只是将内部函子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)
vs int (B::*)(int)
vs int (*)(int)
。
我要问的是,他们是否有任何方法可以模板化A::f
以便可以采取其中任何一个?
通常,您使用std::
/boost::
/std::tr1
::function<int(int)>
来完成此类工作。它可以采用具有正确签名的任何函数对象(包括指针)。您可以使用 bind
创建调用成员函数的函数对象,该对象在同一包中可用。
我不确定您要实现的目标,但您可能需要研究:
- Boost.Function - 可以包装任何类型的可调用
- Boost.Bind - 可用于将成员函数绑定到实例
相关文章:
- 没有找到相关文章