[問題] std::bind傳入引數 (已解決)

看板C_and_CPP作者 (Young)時間7年前 (2016/11/25 10:33), 7年前編輯推噓0(009)
留言9則, 3人參與, 最新討論串1/1
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) VC++ 問題(Question): 最近在看Effective Modern C++中文版 條款34寫到盡量用lambda取代bind 作者舉了一個例子我截取片段如下 https://codepaste.net/17veuz 1-8行是function的宣告 15行的setSoundL是使用lambda 29行是使用bind會得到的錯誤範例 錯誤原因是now()+1h會在bind時就當作引數傳入 而不是呼叫bind時才計算 39行是作者修改過的範例 將now()+1h再用bind包裝一次 我的疑問是為何這樣不會在bind的時候就把now傳進去? 試著寫一個簡單的code來重現 http://ideone.com/tSyvtn 原本會預計test2在經過23行就能得到5576 但test2輸出結果還是一樣為10 表示test2在bind的時候就已經把值傳入了 並沒有達到書上講的效果 所以想問問看怎樣可以讓23行的set發生作用? 使得25行的test2()得到5576 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.212.217 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1480041214.A.96B.html

11/25 18:25, , 1F
m.GetX() 改成 std::bind(&Manager::GetX, &m)
11/25 18:25, 1F

11/25 18:59, , 2F
感謝這樣確實就可以了 不過我還是很好奇書上的例子
11/25 18:59, 2F

11/25 18:59, , 3F
為什麼可以這樣就拿到正確的值
11/25 18:59, 3F

11/26 02:00, , 4F
那個範例真的是對的嗎= =? http://ideone.com/oCueTf
11/26 02:00, 4F

11/26 07:59, , 5F
我也是很納悶 看起來怪怪的所以才想來問問看
11/26 07:59, 5F

11/26 12:08, , 6F
作者寫錯了,應該是要呼叫function才對
11/26 12:08, 6F

11/26 12:09, , 8F
看234-236的部分,跟下一個的235,就可以解答你的問題
11/26 12:09, 8F

11/26 13:40, , 9F
感謝凱薩 這樣比較有道理一些
11/26 13:40, 9F
※ 編輯: ilikekotomi (36.231.116.19), 11/26/2016 13:41:06
文章代碼(AID): #1ODwB-bh (C_and_CPP)