Функторы C ++ и параметры по умолчанию - PullRequest
2 голосов
/ 21 ноября 2011

Я написал библиотеку функторов (на основе учебника по адресу: 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 Ответ

1 голос
/ 22 ноября 2011

Если вы действительно не хотите (или не можете) использовать работу других людей, которые уже решили эту проблему, как насчет конструктора для функтора, чтобы сохранить параметры, которые вы хотите передать?!?

Вы должны привести это в порядок (например, включить тип возврата 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();
...