[問題] 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