我写了一个仿函数库(基于教程:http://www.tutok.sk/fastgl/callback.html)。
目前,我可以编写以下代码:
class MyClass
{
public:
void Test(int a,int b);
};
MyClass c;
Functor2<void,int,int> f=makeFunctor(c,&MyClass::Test);
...
f(1,2);
我想添加另一个功能,以便我可以将参数与实际功能绑定(向前传递),例如:
Functor0<void> f=makeFunctor(c,&MyClass::Test,3,4);
...
f(); // this will use the default parameters 3,4
我知道boost有这个功能,但我不想用它 - 我想自己编写。
我的问题是如何定义一个仿函数,我也可以传递默认参数以在调用本身中使用。我不想使用boost或std ++的原因是因为这个代码是跨平台的,并且将在一些没有增强功能的平台上使用。
答案 0 :(得分:1)
如果你真的不想(或不能)使用已经解决过这个问题的其他人的工作,那么仿函数的构造函数如何保留你想要传递的参数?!?
你必须整理一下(例如,在模板args中包含BinaryFunctor的返回类型,顺便说一下我没有编译它!)但喜欢这个应该有效
class MyClass
{
public:
void Test(int a,int b);
};
template <class BinaryFunctor, class Arg1, class Arg2>
class Functor0
{
public:
Arg1 _a;
Arg2 _b;
BinaryFunctor _func;
void operator() ()
{
_func(_a, _b);
}
};
MyClass c;
Functor2<void,int,int> f=makeFunctor(c,&MyClass::Test);
f(1,2);
Functor0<Functor,int,int> f2(f,3,4);
f2();