[問題] 函式指標如何用template儲存?

看板C_and_CPP (C/C++)作者 (皮老闆)時間10年前 (2015/06/06 13:47), 編輯推噓6(6025)
留言31則, 9人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): 變數儲存函式指標的方式 程式碼(Code):(請善用置底文網頁, 記得排版) 函式指標宣告如下 void (helloworld::*pf)() = &helloworld::funcA; 或是 int (helloworld::*pf2)(int a,int b) = &helloworld::funcB; 也就是儲存不同的引述與回傳值的function pointer template要如何宣告? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.228.29.119 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1433569629.A.AF3.html

06/06 14:04, , 1F
typename T
06/06 14:04, 1F

06/06 14:24, , 2F
有簡單的方法跟困難的方法,簡單的方法就是用typedef
06/06 14:24, 2F

06/06 14:25, , 3F
比方說typedef bool (*SomeFunctionPt)(int, int);
06/06 14:25, 3F

06/06 14:26, , 4F
再std::list<SomeFuntionPt>
06/06 14:26, 4F

06/06 14:26, , 5F
困難的就...沒必要說了 XD 不知道你問的是不是這個
06/06 14:26, 5F

06/06 14:28, , 6F
另外C++11的std::function也可以用
06/06 14:28, 6F

06/06 15:04, , 7F
我是想能不能用一個變數可以放入各種函式指標
06/06 15:04, 7F

06/06 15:21, , 8F
問題還是在於你要怎麼用?
06/06 15:21, 8F

06/06 15:25, , 9F
例如你這個變數是在甚麼時機點會決定函式型態?
06/06 15:25, 9F

06/06 15:26, , 10F
在執行的過程中他會儲存不同的函式嗎
06/06 15:26, 10F

06/06 15:26, , 11F
template 是個手段, 不是目的
06/06 15:26, 11F

06/06 17:35, , 12F
06/06 17:35, 12F

06/06 18:21, , 13F
樓上function pointer轉成void*是不符合標準的吧
06/06 18:21, 13F

06/06 19:53, , 14F
可以動態做,但是只能硬cast
06/06 19:53, 14F

06/06 19:54, , 15F
比方說dlsym就是抓void*讓你轉fp, 但是很遺憾的是PkmX
06/06 19:54, 15F

06/06 19:55, , 16F
說得對,反轉是不可以的,你可以用reinterpret_cast
06/06 19:55, 16F

06/06 19:55, , 17F
去做,但是對不對要看系統
06/06 19:55, 17F

06/06 19:58, , 18F
因為例如說沒有說指標大小一定會對嗎?
06/06 19:58, 18F

06/06 19:59, , 19F
突然想到以前 GCC 力戰有關 mem fn ptr 的事情XDDD
06/06 19:59, 19F

06/06 20:01, , 20F
boost::function 再搭 boost::any 呢 :P
06/06 20:01, 20F

06/06 20:02, , 21F
member function 可以考慮用 boost::bind 來做也不錯
06/06 20:02, 21F

06/06 20:04, , 22F
忘了轉void*不可攜,改成用多型存下來
06/06 20:04, 22F

06/06 20:59, , 23F
我也覺得用std::experimental::any或boost::any去做比較恰當
06/06 20:59, 23F

06/06 22:26, , 24F
說到這, 有人可以分享一下 boost::any 的經典用法嗎?
06/06 22:26, 24F

06/06 22:27, , 25F
我還是不知道甚麼時候用這個東西會很酷 QQ
06/06 22:27, 25F

06/07 22:54, , 26F
derived class 不能放到 vector<Base> 裡
06/07 22:54, 26F

06/07 22:57, , 27F
用 vector<Base*> 還要手動管理記憶體太煩了...
06/07 22:57, 27F

06/07 22:57, , 28F
就偷懶用 vector<boost::any> ...
06/07 22:57, 28F

06/07 23:01, , 29F
b 大的例子是因為 smart pointer 不適當嗎 ?
06/07 23:01, 29F

06/07 23:16, , 30F
其實是因為那時候還不會用 smart pointer XDDD
06/07 23:16, 30F

06/13 05:51, , 31F
其實wxwidget 官方文件很完整
06/13 05:51, 31F
文章代碼(AID): #1LSebThp (C_and_CPP)
文章代碼(AID): #1LSebThp (C_and_CPP)