【发布时间】:2011-04-15 01:27:05
【问题描述】:
点赞:vector<void *(*func)(void *)>...
【问题讨论】:
-
向量
点赞: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 4.
return 0;
}
您可以使用typedef 部分隐藏函数转换语法,但仍然存在将函数调用为错误类型的危险,从而导致崩溃或其他未定义的行为。所以不要这样做。
【讨论】:
// shorter
std::vector<int (*)(int)> v;
v.push_back(mult);
b = v[0](2); // The value of b is 4.
【讨论】:
如上图所示,将函数存储在向量中可能是一项艰巨的任务。在这种情况下,如果你想动态使用一个函数,你也可以在指针中存储一个 函数,这样会容易得多。这样做的主要优点是您可以存储任何类型的函数,无论是普通函数还是参数化函数(有一些输入作为参数)。完整的过程在下面给出的链接中通过示例进行了描述......看看......!!! how can we store Function in pointer
【讨论】: