看板 C_and_CPP 關於我們 聯絡資訊
請問這個語法是什麼鬼 /_\ 出自這邊... http://stackoverflow.com/questions/110157/how-to-retrieve-all-keys-or-values-from-a-stdmap/110228#110228 雖然我知道 bind 也知道 map 也知道 map::value_type 也知道 boost::lambda::_1 但是 bind( &std::map<int,int>::value_type::first, _1 ) 我實在困惑了.. bind 怎麼有辦法用 &std::map<int,int>::value_type::first 這種語法 去取得 pair 的 first 成員... 有沒有大師可以開示一下.. <(_ _)> -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.105.20
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