использование mem_fun с функцией, имеющей более одного аргумента - PullRequest
2 голосов
/ 08 июля 2011

Я пытаюсь работать с классом функции boost:. В приведенном ниже примере все прекрасно работает для вызова foo (), но если я хочу сделать то же самое с функцией sum () -, gcc-компилятор жалуется на эту строку:

_f2 = std::bind1st(std::mem_fun(f), x);

Mem_func принимает только функции с одним аргументом (кроме указателя на объект класса, который я связываю)? Если да, то какую еще функцию я могу использовать? Или как мне изменить эту строку кода?

Я думаю, что есть способ с boost: bind (), но я пока не выяснил, как использовать его в этом контексте.

Вот полный код:

#include <boost/function.hpp>
#include <iostream>

class X
{
public:

    int foo(int i){return i;};
    int sum(int i, int j) {return i+j;};
};

class Func
{

public:

   Func(X *x,  int (X::* f) (int))
   {
      _f1 = std::bind1st(std::mem_fun(f), x);
      std::cout << _f1(5); // Call x.foo(5)
   };

   Func(X *x,  int (X::* f) (int, int))
   {
      _f2 = std::bind1st(std::mem_fun(f), x);
      std::cout << _f2(5, 4); // Call x.foo(5,4)
   };

private:

    boost::function<int (int)> _f1;
    boost::function<int (int, int)> _f2;
};


int main()
{

    X x;

    Func func1(&x, &X::foo);
    Func func2(&x, &X::sum);

    return 0;
}

1 Ответ

3 голосов
/ 08 июля 2011

Вы можете использовать boost bind:

_f2 = boost::bind(f, x, _1, _2);
...