【问题标题】:Directly call the return functor from bind1st and bind2nd从 bind1st 和 bind2nd 直接调用返回函子
【发布时间】:2013-12-12 15:25:12
【问题描述】:

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
}

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

【问题讨论】:

  • 注意_T是一个保留标识符!
  • “出现很多构建错误。”好吧,一般来说,第一个错误行真的很有帮助。您应该将它们包括在您的问题中。或者至少描述一下错误信息中写的内容...
  • 你感受到一元函数和二元函数的区别了吗? bind2nd 需要最后一个。
  • 请注意,这在 C++11 中已全部弃用。使用bind 代替bind1stbind2nd,并且不要费心从unary_functionbinary_function 派生。

标签: c++ functor bind2nd


【解决方案1】:

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

  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&lt;int&gt;(),10),您将拥有一个一元函数。这不会改变 bind2nd 调用的输入类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 2012-06-05
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    相关资源
    最近更新 更多