【问题标题】:How can I store function pointer in vector?如何将函数指针存储在向量中?
【发布时间】:2011-04-15 01:27:05
【问题描述】:

点赞:vector<void *(*func)(void *)>...

【问题讨论】:

  • 向量

标签: pointers vector


【解决方案1】:

您可以声明一个指向函数的指针向量,该函数采用单个 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 部分隐藏函数转换语法,但仍然存在将函数调用为错误类型的危险,从而导致崩溃或其他未定义的行为。所以不要这样做。

【讨论】:

  • b 的值为 4 而不是 2
【解决方案2】:
// shorter
std::vector<int (*)(int)> v;
v.push_back(mult);
b = v[0](2);        // The value of b is 4.

【讨论】:

    【解决方案3】:

    如上图所示,将函数存储在向量中可能是一项艰巨的任务。在这种情况下,如果你想动态使用一个函数,你也可以在指针中存储一个 函数,这样会容易得多。这样做的主要优点是您可以存储任何类型的函数,无论是普通函数还是参数化函数(有一些输入作为参数)。完整的过程在下面给出的链接中通过示例进行了描述......看看......!!! how can we store Function in pointer

    【讨论】:

    • 我认为 OP 已经意味着将函数指针存储在向量中。您提供的链接仅说明如何使用函数指针。我认为 OP 已经知道这一点。
    猜你喜欢
    • 2021-06-03
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 2022-10-01
    • 1970-01-01
    相关资源
    最近更新 更多