作者:
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:00typename T
有簡單的方法跟困難的方法,簡單的方法就是用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*是不符合標準的吧
可以動態做,但是只能硬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:00derived class 不能放到 vector<Base> 裡用 vector<Base*> 還要手動管理記憶體太煩了...就偷懶用 vector<boost::any> ...
作者:
Feis (永遠睡不著 @@)
2015-06-07 23:01:00b 大的例子是因為 smart pointer 不適當嗎 ?
作者:
bibo9901 (function(){})()
2015-06-07 23:16:00其實是因為那時候還不會用 smart pointer XDDD
作者:
SSARCandy (SSARCandy)
2015-06-13 05:51:00其實wxwidget 官方文件很完整