将 std::vector 转换为 .NET 列表的最有效方法是什么?
为了提供一些背景信息,我使用 C++/CLI 包装了一个非托管 C++ 类。 C++/CLI 类保存一个指向 C++ 类的指针,并且我为每个公共方法都有一个包装器。
一种方法返回 std::vector,因此在我的包装器中我将返回 .NET 类列表。 IE。
// unmanaged class
class A
{
public:
std::vector<int> runList();
}
// managed class
public ref class A
{
public:
// the below is obviously extremely inefficient
List<UInt32> MethodA()
{
std::vector<unsigned int> runList = mpChannelNode->runList();
std::vector<unsigned int>::iterator itr;
List<UInt32> list = gcnew List<UInt32>();
for (itr = runList.begin(); itr != runList.end(); itr++)
{
list.Add(*itr);
}
return list;
}
private:
A* mpChannelNode;
}
我怎样才能使这个更有效率?请随意为 .NET 类推荐不同的返回类型。假设我只需要以任何形状或形式将该向量有效地引入托管世界。
如果你是really如果担心的话,请使用无法验证的代码:
List<unsigned>^ MethodA()
{
std::vector<unsigned> const& runList = mpChannelNode->runList();
array<unsigned>^ ret = gcnew array<unsigned>(runList.size());
if (runList.size())
{
pin_ptr<unsigned> dest = &ret[0];
std::memcpy(dest, &runList[0], runList.size() * sizeof(unsigned));
}
return gcnew List<unsigned>(ret);
}
也就是说,如果两者有明显的差异,我会感到惊讶......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)