C++ 对具有多个参数的函数使用mem_-fun

C++ 对具有多个参数的函数使用mem_-fun,c++,function,boost,function-pointers,C++,Function,Boost,Function Pointers,我正在尝试使用boost:function类。在下面的示例中,foo()-调用一切正常,但如果我想对sum()函数执行同样的操作,gcc编译器会抱怨这一行: _f2 = std::bind1st(std::mem_fun(f), x); mem_func是否只接受带有一个参数的函数(指向我绑定的类对象的指针除外)?如果是,我还可以使用什么功能?或者我必须如何更改这行代码 我认为boost:bind()有一种方法,但我还没有弄清楚如何在这种情况下使用它 以下是完整的代码: #include &l

我正在尝试使用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;
}
#包括
#包括
X类
{
公众:
intfoo(inti){returni;};
int和(inti,intj){返回i+j;};
};
类函数
{
公众:
Func(X*X,int(X::*f)(int))
{
_f1=std::bind1st(std::mem_fun(f),x);

std::cout您可以使用boost绑定:

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

谢谢,这非常有帮助,如果你理解语法,我必须阅读更多关于bind类的内容,非常好用。它比使用bind1st/bind2nd好得多,我永远记不起要使用哪一个。你可以用_f1=boost::bind(f,x,_1)替换_f1;