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

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

Links booklink

Contact Us: admin [ a t ] ucptt.com