2011-05-24 47 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第二個參數綁定之間的區別。