看板 C_and_CPP 關於我們 聯絡資訊
編譯器(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
PkmX: m.GetX() 改成 std::bind(&Manager::GetX, &m) 11/25 18:25
ilikekotomi: 感謝這樣確實就可以了 不過我還是很好奇書上的例子 11/25 18:59
ilikekotomi: 為什麼可以這樣就拿到正確的值 11/25 18:59
PkmX: 那個範例真的是對的嗎= =? http://ideone.com/oCueTf 11/26 02:00
ilikekotomi: 我也是很納悶 看起來怪怪的所以才想來問問看 11/26 07:59
Caesar08: 作者寫錯了,應該是要呼叫function才對 11/26 12:08
Caesar08: 看234-236的部分,跟下一個的235,就可以解答你的問題 11/26 12:09
ilikekotomi: 感謝凱薩 這樣比較有道理一些 11/26 13:40
※ 編輯: ilikekotomi (36.231.116.19), 11/26/2016 13:41:06