【发布时间】:2019-05-06 19:34:02
【问题描述】:
我有几个这样定义的函数:
ParentClass* fun1();
ParentClass* fun2();
ParentClass* fun3(bool inp=false);
ChildClass* fun4();
ChildClass* fun5(int a=1, int b=3);
我想将它们放入某种数组中,如下所示:
void* (*arr[5])() = {
(void* (*)())fun1,
(void* (*)())fun2,
(void* (*)())fun3,
(void* (*)())fun4,
(void* (*)())fun5
}
现在我想简单地使用这个函数数组
for(int i=0; i<5; i++)
someFunction(arr[i]());
现在我意识到问题是 void* (*arr[5])(),但鉴于我只想使用函数而不提供参数,我希望所有这些都成为同一个数组的一部分。
不过,这些都是非常 C 风格的方法。有没有更好的方法来使用 C++ 中的模板?
【问题讨论】:
-
为什么要丢弃返回的类型?
ChildClass不继承ParentClass吗? -
当我使用它时,我实际上将它投射到
ParentClass。我可以将其设为 ParentClass* 而不是 void*,但这样我就必须将每个条目类型强制转换为数组。相反,我目前选择在从数组中检索它之后进行转换。 -
我通过我不想使用的问题传达了错误信息。我确实想使用它。相应地修改了问题。
-
在你的第一个 sn-p 中你已经声明了两次
fun4,这是一个错字吗? -
是的。已更正。