C ++仿函数和默认参数

时间:2011-11-21 17:54:18

标签: c++ templates boost metaprogramming functor

我写了一个仿函数库(基于教程: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 ++的原因是因为这个代码是跨平台的,并且将在一些没有增强功能的平台上使用。

1 个答案:

答案 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();