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

作者: sohumi (皮老闆)   2015-06-06 13:47:02
開發平台(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要如何宣告?
作者: PkmX (阿貓)   2015-06-06 14:04:00
typename T
作者: Killercat (殺人貓™)   2015-06-06 14:24:00
有簡單的方法跟困難的方法,簡單的方法就是用typedef比方說typedef bool (*SomeFunctionPt)(int, int);再std::list<SomeFuntionPt>困難的就...沒必要說了 XD 不知道你問的是不是這個另外C++11的std::function也可以用
作者: sohumi (皮老闆)   2015-06-06 15:04:00
我是想能不能用一個變數可以放入各種函式指標
作者: Feis (永遠睡不著 @@)   2015-06-06 15:21:00
問題還是在於你要怎麼用?例如你這個變數是在甚麼時機點會決定函式型態?在執行的過程中他會儲存不同的函式嗎template 是個手段, 不是目的
作者: kevingwn (如雲如風的人生)   2015-06-06 17:35:00
作者: PkmX (阿貓)   2015-06-06 18:21:00
樓上function pointer轉成void*是不符合標準的吧
作者: Killercat (殺人貓™)   2015-06-06 19:53:00
可以動態做,但是只能硬cast比方說dlsym就是抓void*讓你轉fp, 但是很遺憾的是PkmX說得對,反轉是不可以的,你可以用reinterpret_cast去做,但是對不對要看系統
作者: suhorng ( )   2015-06-06 19:58:00
因為例如說沒有說指標大小一定會對嗎?突然想到以前 GCC 力戰有關 mem fn ptr 的事情XDDD
作者: LiloHuang (十年一刻)   2015-06-06 20:01:00
boost::function 再搭 boost::any 呢 :Pmember function 可以考慮用 boost::bind 來做也不錯
作者: kevingwn (如雲如風的人生)   2015-06-06 20:04:00
忘了轉void*不可攜,改成用多型存下來
作者: PkmX (阿貓)   2015-06-06 20:59:00
我也覺得用std::experimental::any或boost::any去做比較恰當
作者: Feis (永遠睡不著 @@)   2015-06-06 22:26:00
說到這, 有人可以分享一下 boost::any 的經典用法嗎?我還是不知道甚麼時候用這個東西會很酷 QQ
作者: bibo9901 (function(){})()   2015-06-07 22:54:00
derived class 不能放到 vector<Base> 裡用 vector<Base*> 還要手動管理記憶體太煩了...就偷懶用 vector<boost::any> ...
作者: Feis (永遠睡不著 @@)   2015-06-07 23:01:00
b 大的例子是因為 smart pointer 不適當嗎 ?
作者: bibo9901 (function(){})()   2015-06-07 23:16:00
其實是因為那時候還不會用 smart pointer XDDD
作者: SSARCandy (SSARCandy)   2015-06-13 05:51:00
其實wxwidget 官方文件很完整

Links booklink

Contact Us: admin [ a t ] ucptt.com