[问题] functor to function pointer

楼主: ialk (没有灵感..)   2015-04-29 12:06:09
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
MSVC++ 10.0
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
std
问题(Question):
runtime error
喂入的资料(Input):
预期的正确结果(Expected Output):
print
1
2
3
错误结果(Wrong Output):
access violation
程式码(Code):(请善用置底文网页, 记得排版)
http://ideone.com/1FKquB
补充说明(Supplement):
如程式码,会死在18行
fp g3 = *g1.target<fp>();
请问应该要怎么写才是正确的
作者: PkmX (阿猫)   2015-04-29 12:17:00
基本上没办法把std::bind回传的东西转成func. pointer顶多就 g1.target<decltype(std::bind(f, _1))>() 吧好奇你干麻不就直接用g1 = f建构就好
楼主: ialk (没有灵感..)   2015-04-29 12:24:00
其实我想做的事是bind一个member function然后传给一个function pointer
作者: PkmX (阿猫)   2015-04-29 13:02:00
基本上function pointer是没有state的当然如果你可以多传一个this的话可以参考:http://ideone.com/q5k9gX
作者: suhorng ( )   2015-04-29 15:28:00
bind 出来应该会是某种 anonymous type?就像每个 lambda 的 type 都不一样我觉得可以直接传 std::function 的话是最简单的办法
楼主: ialk (没有灵感..)   2015-04-29 15:35:00
因为我要call的API是function pointer所以想从std::function bind一个member function传过去
作者: littleshan (我要加入剑道社!)   2015-04-29 17:29:00
如果你使用一个设计良好的API,在传入callback时应该还可以传入一个void*作为额外参数而API会把这个void*当参数去呼叫你的function pointer这么一来你就可以传递this pointer了只是,并非所有的API设计者都有这种sense :(
楼主: ialk (没有灵感..)   2015-04-29 17:44:00
可惜没有多一个参数 我也无法去修改那个API :(
作者: Feis (永远睡不着 @@)   2015-04-29 18:01:00
另一种可能就是用 template 生 wrapper 去被指

Links booklink

Contact Us: admin [ a t ] ucptt.com