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::foofoo,因为它们的原型不同:int (A::*)(int) vs int (B::*)(int) vs int (*)(int)

我要问的是,他们是否有任何方法可以模板化A::f以便可以采取其中任何一个?

通常,您使用std::/boost::/std::tr1 ::function<int(int)>来完成此类工作。它可以采用具有正确签名的任何函数对象(包括指针)。您可以使用 bind 创建调用成员函数的函数对象,该对象在同一包中可用。

我不确定您要实现的目标,但您可能需要研究:

  • Boost.Function - 可以包装任何类型的可调用
  • Boost.Bind - 可用于将成员函数绑定到实例
相关文章:
  • 没有找到相关文章