空*到向量
void* to vector
我有一个来自某个大库的函数。我必须将论点作为无效*传递。我想传递一个向量。我正在使用传递它
vector<myClass*> myName;
function(...,(void*)&myName,...)
现在在这个函数中,我想将 void* 投射回矢量,但我不知道该怎么做。
我正在尝试类似的东西:
vector<myClass*> myName = static_cast< vector<myClass*> >(voidPointerName);
但我得到
error: invalid conversion from ‘void*’ to ‘long unsigned int’
error: initializing argument 1 of ‘std::vector<_Tp, _Alloc>
::vector(size_t, const _Tp&, const _Alloc&)
[with _Tp = myClass*, _Alloc = std::allocator<myClass*>]’
编辑:
我想做的是将指向我自己的类的指针向量传递给这个函数 http://ftp.heanet.ie/disk1/www.gnu.org/software/libmicrohttpd/microhttpd/microhttpd_10.html,所以我必须将其强制转换为 void*,然后将其转换回 vector,因此代码如下所示:
vector<myClass*> v
MHD_create_response_from_callback (...,HERE_PASS_VECTOR,...);
以及此函数的代码:
callback(void* cls,...)
{
CAST_CLS_BACK_TO_VECTOR
ITERATE_OVER_VECTOR
}
我猜你实际上是在做类似的事情
vector<myClass*> msisdnStructs;
...
function(...,(void*)&msisdnStructs,...);
在这种情况下,您将传递指向矢量的指针。在函数中,您尝试将该指针到向量转换为向量,这当然不起作用。但是,您可以取消引用传递的void*
参数(适当强制转换),并使用它来分配给对向量的引用(使用引用以避免复制):
vector<myClass*>& myName = *reinterpret_cast<vector<myClass*>*>(voidPointerName);
你的这段代码无法编译:
vector<MyClass*> myName = static_cast< vector<myClass*> >(voidPointerName);
尝试一步一步地推理。
您有一个void*
作为输入(voidPointerName
),并且想要一个std::vector
。
您要做的第一件事是从void*
铸造到vector*
:您可以使用现代C++式铸造reinterpret_cast
来实现此目的:
<<vector pointer>> p = reinterpret_cast< <<vector pointer>> >(voidPointerName);
由于您有一个vector<MyClass*>
,因此<<vector pointer>>
实际上是vector<MyClass*> *
的(我只是添加了指针的*
)。
因此,上面的伪代码变为:
vector<MyClass*>* p = reinterpret_cast<vector<MyClass*> *>(voidPointerName);
您可能希望使用C++引用&
(它提供带有指针语义的值语法),因此可以稍微修改代码,如下所示:
vector<MyClass*>& v = *( << the reinterpret_cast thing above >> );
(在上述作业的右侧,我们使用 *
取消引用指针。
即
// Final form
vector<MyClass*>& v = *reinterpret_cast<vector<MyClass*> *>(voidPointerName);
int a1=1, a2=2,a3=3,a4=4;
std::vector<int> tst;
tst.push_back(a1);
tst.push_back(a2);
tst.push_back(a3);
tst.push_back(a4);
for (std::vector<int>::iterator it = tst.begin() ; it != tst.end(); ++it)
{
std::cout << ' ' << *it;
//ptst.push_back(const_cast<void*>(it));
}
std::cout << 'n';
//const void *pitst; --WORKING
//pitst=const_cast<void *>(reinterpret_cast<void *>(&a1)); --WORKING
//std::cout<<"n"<<*reinterpret_cast<const int *>(pitst); --WORKING
std::vector<const void *> ptst;
ptst.push_back(const_cast<void *>(reinterpret_cast<void *>(&a1)));
ptst.push_back(const_cast<void *>(reinterpret_cast<void *>(&a2)));
ptst.push_back(const_cast<void *>(reinterpret_cast<void *>(&a3)));
ptst.push_back(const_cast<void *>(reinterpret_cast<void *>(&a4)));
std::cout<<"n"<< *reinterpret_cast<const int *>(ptst[0]);
//std::cout<<"n"<< *reinterpret_cast<const int *>(ptst.pop_back()); --compiler error
for (std::vector<const void *>::iterator it = ptst.begin() ; it != ptst.end(); ++it)
{
std::cout<<"n"<< *reinterpret_cast<const int *>(*it);
//ptst.push_back(const_cast<void*>(it));
}
.....
输出:
1 2 3 4
11234..........
您可以替换..int 与您的 ..类并尝试
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 计算排序向量的向量中唯一值的计数
- 矩阵向量乘法(cublasDgemv)返回零
- 一对向量构造函数:初始值设定项列表与显式构造
- 将结构向量排序为子组
- 在C++中调整向量中的索引
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么