您可以声明一个指向函数的指针向量,该函数采用单个void *
参数并返回,void *
如下所示:
#include <vector>
std::vector<void *(*)(void *)> v;
Run Code Online (Sandbox Code Playgroud)
如果要存储具有不同原型的函数的指针,则将变得更加困难/危险。然后,您必须在将函数添加到向量中时将其转换为正确的类型,并在调用时将其转换回原始原型。只是一个例子,这变得多么丑陋:
#include <vector>
int mult(int a) { return 2*a; }
int main()
{
int b;
std::vector<void *(*)(void *)> v;
v.push_back((void *(*)(void *))mult);
b = ((int (*)(int)) v[0])(2); // The value of b is 2.
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用typedef
来部分隐藏函数强制转换语法,但是仍然存在将函数调用为错误类型的危险,从而导致崩溃或其他未定义的行为。所以不要这样做。