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