【发布时间】:2011-05-27 00:52:53
【问题描述】:
将 std::vector 转换为 .NET 列表的最有效方法是什么?
为了提供一些上下文,我用 C++/CLI 包装了一个非托管 C++ 类。 C++/CLI 类包含一个指向 C++ 类的指针,并且我为每个公共方法都有一个包装器。
一个方法返回一个 std::vector,所以在我的包装器中我将返回 .NET 类列表。即
// 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 类推荐不同的返回类型。假设我只需要将该向量以任何形状或形式有效地放入托管世界。
【问题讨论】:
-
如果你只是包装
vector<T>,为什么不实现IList<T>并将所有操作代理到vector? -
嗨,Gabe - 你能把它变成答案吗? :)
标签: .net visual-c++ c++-cli