0

bind1st 和 bind2nd 的返回值是从 unary_function 派生的。通过调用它们,我认为它们提供了一个接受一个参数的函数对象。但这也许是错误的。

这是我的代码。

template<typename _T>
class fun: public std::unary_function<_T, _T>
{
public:
    _T operator()(_T arg1, _T arg2) const {return arg1 + arg2;}
};

int main() {
    bind2nd(fun<int>(),10)(10); //My intention is to directly call the results of bind2nd
}

会发生很多构建错误。为什么这是错误的?

4

1 回答 1

3

我相信一元函数对一个参数进行操作,而二元函数对两个参数进行操作。例如

  T operator()(T arg1, T arg2) const {return arg1 + arg2;}

是一个二进制函数。

更改模板(并考虑不使用前导下划线):

template<typename T>
class fun: public std::binary_function<T, T, T>
//                     ^^^^^^--- well, it takes two parameters
{
public:
    T operator()(T arg1, T arg2) const {return arg1 + arg2;}
};

所以,fun是二元函子。绑定其中一个参数后,例如通过调用,std::bind2nd(func<int>(),10)您将拥有一个一元函数。这不会改变bind2nd调用输入的类型。

于 2013-12-12T15:45:13.867 回答