[问题] 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