作者ilikekotomi (Young)
看板C_and_CPP
标题[问题] std::bind传入引数 (已解决)
时间Fri Nov 25 10:33:29 2016
编译器(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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1480041214.A.96B.html
1F:→ PkmX: m.GetX() 改成 std::bind(&Manager::GetX, &m) 11/25 18:25
2F:→ ilikekotomi: 感谢这样确实就可以了 不过我还是很好奇书上的例子 11/25 18:59
3F:→ ilikekotomi: 为什麽可以这样就拿到正确的值 11/25 18:59
5F:→ ilikekotomi: 我也是很纳闷 看起来怪怪的所以才想来问问看 11/26 07:59
6F:→ Caesar08: 作者写错了,应该是要呼叫function才对 11/26 12:08
8F:→ Caesar08: 看234-236的部分,跟下一个的235,就可以解答你的问题 11/26 12:09
9F:→ ilikekotomi: 感谢凯萨 这样比较有道理一些 11/26 13:40
※ 编辑: ilikekotomi (36.231.116.19), 11/26/2016 13:41:06