将mem_fun与具有多个参数的函数一起使用

时间:2011-07-08 15:09:10

标签: c++ function boost function-pointers

我正在尝试使用boost:function类。在下面的例子中,一切都适用于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 个答案:

答案 0 :(得分:3)

你可以使用boost bind:

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