bind1st and bind2nd

bind1st and bind2nd

本文关键字:bind2nd and bind1st      更新时间:2023-10-16

我看到了以下参考文献:

bind1st

bind2nd

我不明白的是两者之间的区别。有人能帮我了解一下其中的区别吗?举个例子会更有帮助。

bind1st绑定第一个参数(例如,您有foo(int a, int b),那么bind1st(foo, 1)(bar)将等效于foo(1, bar)),bind2nd绑定第二个参数。不过,不要使用它们,它们几乎是无用的——使用广义的boost::bind(或者C++0x中的std::bind)。

假设您有一个函数对象f(x,y)和一个算法,该算法需要一个只有一个变量的functoid。然后有两种可能性:

  • y设置一些固定值,并让算法在x上工作
  • x设置一些固定值,并让算法在y上工作

这就是区别。

这是显而易见的。bind1st将一个值绑定到函子的第一个操作数(假设您知道C++中的函子是什么),bind2nd绑定到第二个操作数。但对于像+(或std::plus)这样的交换算子,它实际上没有什么区别(如果你在那个例子中没有用非交换行为重载+)。

bind1st绑定函数的第一个参数,而bind2nd绑定第二个参数。如果做像plus()函子这样的运算,它不会有任何区别,因为两个数字的加法在两种情况下都保持不变,但如果你做像minus()这样的运算时,它会根据你使用bind1st或bind2nd而产生差异,示例5-4和4-5会产生不同的结果,现在你得到了bind1st第一个参数绑定和bind2nd第二个参数绑定之间的差异。