喜欢:vector<void *(*func)(void *)>
...
答案 0 :(得分:5)
您可以声明一个指向函数的指针向量,该函数采用单个void *
参数并返回void *
,如下所示:
#include <vector>
std::vector<void *(*)(void *)> v;
如果要存储指向具有不同原型的函数的指针,则变得更加困难/危险。然后,在将函数添加到向量时,必须将函数转换为正确的类型,并在调用时将它们转换回原始原型。这只是一个丑陋的例子:
#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;
}
您可以使用typedef
来部分隐藏函数转换语法,但仍然存在将函数调用为错误类型的危险,从而导致崩溃或其他未定义的行为。所以不要这样做。
答案 1 :(得分:1)
// shorter
std::vector<int (*)(int)> v;
v.push_back(mult);
b = v[0](2); // The value of b is 4.
答案 2 :(得分:0)
如上所示,在向量中存储函数可能是一项艰巨的任务。在这种情况下,如果你想动态使用一个函数,你也可以在指针 中存储 函数,这更容易。这样做的主要优点是你可以存储任何类型的函数,无论是普通函数还是函数函数(将某些输入作为参数)。完整的过程在下面给出的链接中有描述......只是看看...... !!! how can we store Function in pointer