[問題] 取得 std::function 的簽名

看板C_and_CPP (C/C++)作者 (CA)時間15年前 (2010/11/08 23:42), 編輯推噓2(2014)
留言16則, 4人參與, 最新討論串1/1
比方說: typedef int Function( int, char * [] ); typedef std::function< Function > Functor; 我希望可以透過 Functor 來拿到 Function 這個簽名以利我轉型 像是: void * symbol = dlsym( "blahblahblah" ); Functor f = reinterpret_cast< Functor::signature * >( symbol ); 不過我看了一下 function 的成員,好像沒有相關的 typedef 是否有其他的設施可以拿到簽名呢? -- 自High筆記(半荒廢) http://legnaleurc.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.49.85

11/08 23:47, , 1F
#include <boost/function_types/parameter_types.hpp>
11/08 23:47, 1F

11/08 23:54, , 2F
結果我回的完全不相關
11/08 23:54, 2F

11/08 23:57, , 3F
很可惜並沒有, 你可以自己寫一個 type_traits 來弄
11/08 23:57, 3F

11/09 00:02, , 4F
剛剛查了一下我也發現沒有 小訝異 只好自己弄
11/09 00:02, 4F

11/09 00:05, , 5F
好囧 ... 這種實作簡單又還算重要的功能竟然沒做
11/09 00:05, 5F

11/09 00:05, , 6F
因為他內部為了達成萬用的目的(成員函式), 用了很噁心
11/09 00:05, 6F

11/09 00:06, , 7F
的轉型轉來轉去, 實際上不是存指標
11/09 00:06, 7F

11/09 00:07, , 8F
之前看到 CodeProject 某篇文章有介紹
11/09 00:07, 8F

11/09 00:12, , 9F
這不是只要把模板參數再定義出成員就好了嗎?
11/09 00:12, 9F

11/09 00:13, , 10F
像是 template<cls T> ... typedef T signature;
11/09 00:13, 10F

11/09 00:25, , 11F
那這樣的程式碼:http://ppt.cc/i(GO T應該是什麼呢?
11/09 00:25, 11F

11/09 02:38, , 12F
所以問題是 return_type 不算在 signature 裡
11/09 02:38, 12F

11/09 02:38, , 13F
還是可推導相容的型別太多?
11/09 02:38, 13F

11/09 14:48, , 14F

11/09 18:09, , 15F
回傳跟參數型別只要能互轉就好, 而且有同樣呼叫方式的
11/09 18:09, 15F

11/09 18:10, , 16F
Functor 類別也有無限多, 你要寫死成成員是不可能的
11/09 18:10, 16F
文章代碼(AID): #1Cs1fu1h (C_and_CPP)
文章代碼(AID): #1Cs1fu1h (C_and_CPP)