如何将函数指针存储在向量中?

时间:2010-09-21 07:26:01

标签: pointers vector

喜欢:vector<void *(*func)(void *)> ...

3 个答案:

答案 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