2011-05-24 41 views
2

我在下面引用一个观点:bind1st和bind2nd

bind1st

bind2nd

的是我不明白的是两者之间的区别。 任何人都可以帮助我了解其中的差异吗?举个例子会更有帮助。

回答

8

bind1st结合的第一个参数(例如,您有foo(int a, int b),然后bind1st(foo, 1)(bar)将相当于foo(1, bar)),bind2nd第二个。不要使用它们,尽管它们几乎没用 - 用普通的boost::bind代替(或者在C++ 0x中为std::bind)。

+6

如果你没有C++ 0x或不想带来提振依赖他们来很方便。 – 2011-05-24 15:11:34

+0

他们有一元谓词边际使用......但同意,如果你想结合仿函数使用'提振:: function'用'提振:: bind' – AJG85 2011-05-24 15:12:22

+2

@ChristianRau:这就是为什么我说“几乎”没有“完全”无用。虽然避免提升只是适得其反。 – 2011-05-24 15:16:25

3

假设你有一个函数对象f(x,y)和需要只用一个变量的functoid的算法。此外,还有两种可能:

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

算法工作这就是区别。

0

这是显而易见的。 bind1st将值绑定到函子的第一个操作数(假设您知道C++中的函数是什么),第二个为bind2nd。但是,对于可交换运营商+(或std::plus),它实际上没有什么区别(如果你没有在该示例非交换行为超负荷+)。

0

bind1st结合的函数的所述第一参数而bind2nd结合第二个参数。如果像plus()函数那样操作,它将不会产生任何影响,因为在这两种情况下,添加两个数字仍然是相同的,但是如果您像minus()那样执行操作,那么它会根据您使用bind1st或bind2nd, 4和4-5会产生不同的结果,现在你得到了bind1st第一个参数绑定和bind2nd第二个参数绑定之间的区别。