像..: vector<void *(*func)(void *)>
...
你可以声明一个指向函数的指针向量,这些指针取一个 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
''来部分隐藏函数的铸造语法,但仍有可能将一个函数调用为错误的类型,导致崩溃或其他未定义的行为。所以不要这样做。
如上图所示,在向量中存储一个函数可能是一个困难的任务。在这种情况下,如果你想动态地使用一个函数,你也可以存储一个 指针函数 这就简单多了。它的主要优点是你可以存储任何类型的函数,无论是普通函数还是paramatrized函数(有一些输入作为参数)。完整的过程在下面的链接中给出了例子......看看吧......!!我们如何将函数存储在指针中
// shorter
std::vector<int (*)(int)> v;
v.push_back(mult);
b = v[0](2); // The value of b is 4.