将Std::vector通过ref / out从c#传递到c++
本文关键字:c++ vector Std 通过 ref out | 更新日期: 2023-09-27 18:09:40
给出c++函数
void Foo(unsigned int _x, unsigned int _y, std::vector< unsigned int > &_results)
和将std::vector映射到c#中的VectorUInt32类型的Swig接口文件
%include "std_vector.i"
namespace std {
%template(VectorUInt32) vector<unsigned int>;
};
在c#代码中得到以下结果:
public static void Foo(uint _x, uint _y, VectorUInt32 _results)
这很好,但我真正希望的是这个:
public static void Foo(uint _x, uint _y, out VectorUInt32 _results)
有没有人知道如何映射std::vector从c++到c#作为ref out参数?
Stackoverflow真可耻,没有答案!
无论如何,答案是,如果有人感兴趣…如果你在c#中创建了VectorUInt32类型并将其传递给c++函数,它是通过引用传递的,因此可以在c++中修改而不需要ref out参数。接口变为:
c++void Foo(unsigned int _x, unsigned int _y, std::vector< unsigned int > &_results)
接口文件
%include "std_vector.i"
namespace std {
%template(VectorUInt32) vector<unsigned int>;
};
c# public static void Foo(uint _x, uint _y, VectorUInt32 _results)
使用// Create and pass vector to C++
var vec = new VectorUInt32();
Foo(x, y, vec);
// do something with vec, its been operated on!