推 karcher:推 07/23 23:16
→ tinlans:_1 是指定 object 吧。 07/23 23:57
→ tinlans:上面回太短,bind 第一引數是成員指標時,第二引數是 obj 07/23 23:59
→ tinlans:所以那個語法有什麼問題嗎? 07/24 00:02
→ tinlans:還是說你搞混 map::mapped_type 和 map::value_type。 07/24 00:05
→ tinlans:map<int,int>::value_type 是 pair<const int, int> 07/24 00:06
→ tinlans:pair<const int, int>::first 就是一個 const int 實體。 07/24 00:07
→ tinlans:bind() 的求值語意當 _1 是 value 或 ref 時就是 _1.first 07/24 00:08
→ tinlans:,_1 是 pointer 的時候就是 _1->first。 07/24 00:09
→ yoco315:我搞不懂的是bind裡面是怎麼從一個成員指標拿到那個值 @@ 07/24 00:10
→ firose:有個 boost::mem_fn 不是可以把資料成員指標轉成函式? 07/24 00:16
→ tinlans:bind(成員指標, 物件/物件參考/物件指標) 07/24 00:18
→ firose:unspecified-6-1 bind(R T::*f, A1 a1) 此建構式會呼叫它 07/24 00:18
→ tinlans:第二個參數要給才拿得到值,沒給一定死。 07/24 00:19
→ tinlans:上面的求值語意也可以想成 _1.*(成員指標) 和 07/24 00:21
→ tinlans:_1->*(成員指標),實作上是用 .* 和 ->* 把兩個參數結合。 07/24 00:22
→ tinlans:那個 bind() 也不過就是說成員指標綁定的物件延後給而已。 07/24 00:27
→ tinlans:外面的 transform() 會負責把 map 裡的 pair 一個一個塞給 07/24 00:36
→ tinlans:_1 用,效果大概就是這樣,推累了先來睡 XD 07/24 00:36
→ yoco315:O_O 原來如此.. 一直以為 bind 只能用在 function 上面 07/24 03:25
→ yoco315:哇北七了... 感謝大大詳細解說 :D 07/24 03:26
→ yoco315:這樣想一想設計 bind 的人還真是厲害 @@.. 07/24 03:26
→ yoco315:因為我之前也一直在想類似的問題. 但是就想不出來要怎麼作 07/24 03:26
→ yoco315:看到有人給這個解答.. 但是看不太懂所以才上來問 @@ 07/24 03:27
→ tinlans:其實以 OO 為主的程式搭 boost 用常會遇到類似的問題。 07/24 10:15
→ tinlans:因為很多東西都在 class 裡面,要抓比較麻煩。 07/24 10:16
→ yoco315:偉哉 lambda ^O^ 07/24 21:57