【发布时间】:2011-07-10 09:21:42
【问题描述】:
可以使用通用void* 存储普通指针。例如
void* arr[10];
arr[0] = pChar;
arr[1] = pINt;
arr[2] = pA;
以前,我遇到过一个讨论,void* 可能无法在所有平台(比如 64 位及更多)中存储函数指针而不会丢失数据。不过我不确定这个事实。
如果这是真的,那么存储函数指针集合的最便携方式是什么? [注:This question 对此没有满意的回答。]
编辑:我将用索引存储这个函数指针。每当访问此集合时,每个索引都会有一个类型转换。截至目前,我只想制作一个数组或vector。]
【问题讨论】:
-
你将如何调用函数?您必须以某种方式恢复函数指针的原始类型。为了回答您的问题,了解这一点很重要。
-
函数指针有 anything 的共同点吗?一旦它们进入收藏夹,您将如何处理它们?
-
@ybungalobill,我已经编辑了我的问题。截至目前,我想要一个普通的数组。不想诉诸
template解决方案。 -
@iammilind:如果我理解正确,那么您知道索引 0 是 X 类型,索引 1 是 Y 类型,等等......那你为什么不使用函数指针的结构那些已知类型(X f0; Y f1; ...)?如果你不能这样做,那意味着你确实有一些共同点(你对这个集合的每个项目所做的统一操作)。所以,请帮助我们了解您的设计选择。请注意,您使用
void*的示例在实际代码中也没有意义。 -
@Shin:标准冲突。 C++ 和 C 都表示不应将函数指针强制转换为 void*(未定义行为)。 POSIX 说它们必须能够被强制转换为 void* (大概 Windows 也这么说;它使用 DLL)。 C 和 C++ 拒绝的原因:有很多奇怪的架构机器,其中函数指针与数据指针非常非常不同。 POSIX 说“是”的原因是:POSIX 不关心哈佛架构机器。
标签: c++ c function-pointers