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

Pointers 如何在向量中存储函数指针?,pointers,vector,Pointers,Vector,例如:vector..您可以声明指向函数的指针向量,这些函数使用单个void*参数并返回void*,如下所示: #include <vector> std::vector<void *(*)(void *)> v; #包括 std::向量v; 如果您想存储指向具有不同原型的函数的指针,则会变得更加困难/危险。然后,在将函数添加到向量时,必须将其转换为正确的类型,并在调用时将其转换回原始原型。这是一个多么丑陋的例子: #include <vector> i

例如:
vector
..

您可以声明指向函数的指针向量,这些函数使用单个
void*
参数并返回
void*
,如下所示:

#include <vector>
std::vector<void *(*)(void *)> v;
#包括
std::向量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;
}
#包括
int mult(int a){返回2*a;}
int main()
{
int b;
std::向量v;
v、 向后推((空*(*)(空*))mult);
b=((int(*)(int))v[0])(2);//b的值是4。
返回0;
}

您可以使用
typedef
部分隐藏函数强制转换语法,但仍有以错误类型调用函数的危险,从而导致崩溃或其他未定义的行为。所以不要这样做。

如上所示,在向量中存储函数可能是一项困难的任务。在这种情况下,如果你想动态地使用一个函数,你也可以在指针中存储一个函数,这要容易得多。它的主要优点是u可以存储任何类型的函数,无论是普通函数还是参数化函数(有一些输入作为参数)。完整的过程在下面给出的链接中描述,并附有示例…请看一看。。。!!!
//更短
std::向量v;
v、 推回(mult);
b=v[0](2);//b的值是4。

VectorB的值是4而不是2我认为OP已经意味着在向量中存储函数指针。您提供的链接仅说明如何使用函数指针。我想OP已经知道这一点了。
// shorter
std::vector<int (*)(int)> v;
v.push_back(mult);
b = v[0](2);        // The value of b is 4.