C++ 将元素插入std::vector<;无效**(无效*)>;

C++ 将元素插入std::vector<;无效**(无效*)>;,c++,pointers,vector,C++,Pointers,Vector,我需要从定义为 std::vector<void **(void*)> array; 最后,给定一个void*data,我希望以以下方式使用该元素: array[i](data); 很遗憾,我找不到调用数组的正确方法。请向后推。 有人能帮我吗?这是一个函数向量,返回void**,这是不可能的。函数不是对象,不能将它们存储在向量中 (函数类型作为模板类型参数是合法的,一些模板类型使用这些参数,例如std::function和一些类型特征…但是std::vector要求其参数为对象类

我需要从定义为

std::vector<void **(void*)> array;
最后,给定一个
void*data
,我希望以以下方式使用该元素:

array[i](data);
很遗憾,我找不到调用数组的正确方法。请向后推。

有人能帮我吗?

这是一个函数向量,返回
void**
,这是不可能的。函数不是对象,不能将它们存储在向量中

(函数类型作为模板类型参数是合法的,一些模板类型使用这些参数,例如
std::function
和一些类型特征…但是
std::vector
要求其参数为对象类型)

试一试


这就是我想要做的,谢谢!你能告诉我在哪里可以看到void**和void*(*)之间的区别,以及带括号的指针的一般区别吗?@HAL9000:如果你用标识符声明:
void*f(void*)
显然是一个带一个参数的函数;参数和返回类型都是
void*
。类似地,
void**g(void*)
是一个带有一个参数的函数,但返回类型现在是
void**
。另一方面,
void*(*p)(void*)
&f
的类型,是一个指向函数的指针。但是数组。push_back(&element);给出一个编译错误。不需要符号。@HAL9000:我猜您在实际代码中对
元素
的定义与问题中的定义不匹配?使用上述注释中的函数,您可以执行
array.push_back(&f)
数组。向后推(p)std::vector
的语法可能比
std::vector
@Jarod42更直观一些:但它不是等效的<代码>标准::函数
比函数指针更奇特。
使用fptr\u t=decltype(&element)对可读性有很大帮助。
array[i](data);
std::vector<void* (*)(void*)>
array.push_back(&element);