如何将向量作为参数从 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 容器中。