[问题] 函式指标如何用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