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

问题描述 投票:3回答:3

像..: vector<void *(*func)(void *)>...

pointers vector
3个回答
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''来部分隐藏函数的铸造语法,但仍有可能将一个函数调用为错误的类型,导致崩溃或其他未定义的行为。所以不要这样做。


0
投票

如上图所示,在向量中存储一个函数可能是一个困难的任务。在这种情况下,如果你想动态地使用一个函数,你也可以存储一个 指针函数 这就简单多了。它的主要优点是你可以存储任何类型的函数,无论是普通函数还是paramatrized函数(有一些输入作为参数)。完整的过程在下面的链接中给出了例子......看看吧......!!我们如何将函数存储在指针中


0
投票
// shorter
std::vector<int (*)(int)> v;
v.push_back(mult);
b = v[0](2);        // The value of b is 4.
© www.soinside.com 2019 - 2024. All rights reserved.