如何将向量作为参数从 CLI/C++ 包装器传递给 c++ 库?
How to pass a vector as parameter to a c++ library from a CLI/C++ Wrapper?
我发现了类似的问题,但 none 适合我的情况,所以我问自己的问题。
我想使用一个库函数,它接受一个指向 std::vector 的指针,并用数据填充它。
我已经设置了 C++/CLI Wrapper。
我目前正在尝试在包装器中实例化向量,
private:
std::vector<int>* outputVector
在构造函数中,我实例化了它:
outputVector = new std::vector<int>();
现在,在调用c++库函数的包装器方法中:
m_pUnmanagedTPRTreeClass->GetInRegion(..., &outputVector)
我省略了其他参数,因为它们对这种情况无关紧要。我已经可以使用库的其他功能,并且它们可以正常工作。我只是无法将指针传递给 std::vector.
使用这样的代码,我收到错误消息:
error C2664: 'TPSimpleRTree<CT,T>::GetInRegion' : cannot convert parameter 3 from 'cli::interior_ptr<Type>' to 'std::vector<_Ty> &'
我试过删除“&”,因为我不擅长 C++,也不确定如何正确使用指针。然后,错误变为:
error C2664: 'TPSimpleRTree<CT,T>::GetInRegion' : cannot convert parameter 3 from 'std::vector<_Ty> *' to 'std::vector<_Ty> &'
编辑:我试过用“*”替换“&”,它不起作用,我得到错误:
cannot convert from 'std::vector<_Ty>' to 'std::vector<_Ty> &'
矢量的 c++ 函数的签名是这样的:
GetInRegion(..., std::vector<T*>& a_objects)
'std::vector<_Ty> *' to 'std::vector<_Ty> &'
是不言自明的,您需要取消引用而不是获取指针,所以不是:
m_pUnmanagedTPRTreeClass->GetInRegion(..., &outputVector)
使用:
m_pUnmanagedTPRTreeClass->GetInRegion(..., *outputVector)
^~~~~~~!!
编辑后我看到您的 getinregion 签名是:
GetInRegion(..., std::vector<T*>& a_objects)
所以它接受 std::vector 其中 T 是一个指针,而你想传递给 getinregion a std::vector 其中 int 不是一个指针。
鉴于签名:
GetInRegion(..., std::vector<T*>& a_objects)
您可以这样称呼它(在 C++ 或 C++/CLI 中):
std::vector<int*> v;
m_pUnmanagedTPRTreeClass->GetInRegion(..., v);
然后您可以根据需要操作数据或将数据编组到 .Net 容器中。
我发现了类似的问题,但 none 适合我的情况,所以我问自己的问题。
我想使用一个库函数,它接受一个指向 std::vector 的指针,并用数据填充它。
我已经设置了 C++/CLI Wrapper。 我目前正在尝试在包装器中实例化向量,
private:
std::vector<int>* outputVector
在构造函数中,我实例化了它:
outputVector = new std::vector<int>();
现在,在调用c++库函数的包装器方法中:
m_pUnmanagedTPRTreeClass->GetInRegion(..., &outputVector)
我省略了其他参数,因为它们对这种情况无关紧要。我已经可以使用库的其他功能,并且它们可以正常工作。我只是无法将指针传递给 std::vector.
使用这样的代码,我收到错误消息:
error C2664: 'TPSimpleRTree<CT,T>::GetInRegion' : cannot convert parameter 3 from 'cli::interior_ptr<Type>' to 'std::vector<_Ty> &'
我试过删除“&”,因为我不擅长 C++,也不确定如何正确使用指针。然后,错误变为:
error C2664: 'TPSimpleRTree<CT,T>::GetInRegion' : cannot convert parameter 3 from 'std::vector<_Ty> *' to 'std::vector<_Ty> &'
编辑:我试过用“*”替换“&”,它不起作用,我得到错误:
cannot convert from 'std::vector<_Ty>' to 'std::vector<_Ty> &'
矢量的 c++ 函数的签名是这样的:
GetInRegion(..., std::vector<T*>& a_objects)
'std::vector<_Ty> *' to 'std::vector<_Ty> &'
是不言自明的,您需要取消引用而不是获取指针,所以不是:
m_pUnmanagedTPRTreeClass->GetInRegion(..., &outputVector)
使用:
m_pUnmanagedTPRTreeClass->GetInRegion(..., *outputVector)
^~~~~~~!!
编辑后我看到您的 getinregion 签名是:
GetInRegion(..., std::vector<T*>& a_objects)
所以它接受 std::vector 其中 T 是一个指针,而你想传递给 getinregion a std::vector 其中 int 不是一个指针。
鉴于签名:
GetInRegion(..., std::vector<T*>& a_objects)
您可以这样称呼它(在 C++ 或 C++/CLI 中):
std::vector<int*> v;
m_pUnmanagedTPRTreeClass->GetInRegion(..., v);
然后您可以根据需要操作数据或将数据编组到 .Net 容器中。