【发布时间】:2013-12-18 10:40:00
【问题描述】:
我有一个这样的函子
struct foo
{
int a;
foo(a) : a(a) {}
int operator()(int b) { return a+b; }
};
还有这样的课
class bar
{
public:
foo* my_ftor;
bar(foo* my_ftor) : my_ftor(my_ftor) {}
~bar() {}
};
然后假设一个指向这个类的指针,其中包含一个指向 foo 的指针。
foo MyFoo(20);
bar MyBar(&MyFoo);
在一个函数中,我传递了对 bar 的引用,并且我想运行仿函数。我的工作方式如下:
void AnyFunction(bar* RefToBar)
{
int y;
y = RefToBar->my_ftor->operator()(25);
}
还有其他“更简洁”的方法来取消对仿函数的引用吗?类似于
y = RefToBar->my_ftor(25);
不会工作,很遗憾......
有什么想法吗?谢谢
【问题讨论】:
-
(*RefToBar->my_ftor)(25)
-
您还可以创建一个智能指针到函子类,它本身就是一个函子,只需调用指向对象的
operator()。使用 C++11,它可以成为一个完全通用的模板。 -
bar* 不是参考