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);