【发布时间】:2022-01-18 19:37:39
【问题描述】:
我在网上找不到答案的初学者问题,可能是因为我不知道术语。
我想根据计算的索引值调用一系列过程之一。也就是说,给定一个 '1',调用 firstProc(),'2' 调用 secondProc() 等等。
所有过程都是没有参数的无效函数。
我可以用 switch/case 来实现它,但我更喜欢这样的东西:
void* action[2] {*firstProc, *secondProc};
(编译,但警告:invalid conversion from 'void (*)()' to 'void*')
然后:
action[get_index()]();
'action' 的编译器对象不能用作函数。
这一定是可能的,对吧?我已经尝试了几种变体,但我无法通过使用选定的 ('action[index]') 作为函数。
【问题讨论】:
-
问题是什么或多或少很清楚,但是您应该发布代码的minimal reproducible example
-
将其存储为函数指针
void (*)(),正如警告在您的数组中所说,而不是void*。或使用std::function<>。 -
using fnptr = void(*)();和fnptr action[2]{&firstproc, &secondproc}; -
void*是一个 data 指针;它不能合法地用作指向函数的指针。