在DLL边界上公开STL容器不是一个好主意,通常也不可能(详见此答案以了解原因,以及有关在DLL边界上公开std::list的这篇文章)。我需要能够在使用不同编译器(VC08 / VC10+)编译的DLL和EXE之间传递数据; 这个问题只处理一切都相同的情况。
最佳的公开方式是什么?向量与列表有点不同,因为内存保证是连续的,因此如果我只需要一个const double向量,则可以将开始和结束指针提供给dll中的函数以获取块。 DLL还需要返回一些结构,例如向量数组。
我想到了一个包含开始和结束指针的结构:
最佳的公开方式是什么?向量与列表有点不同,因为内存保证是连续的,因此如果我只需要一个const double向量,则可以将开始和结束指针提供给dll中的函数以获取块。 DLL还需要返回一些结构,例如向量数组。
我想到了一个包含开始和结束指针的结构:
template <typename T>
struct vecWrapper<T> {
T* begin;
T* end;
}
// in the dll
int func(vecWrapper<double> numbers);
这样做是否明智?假设从函数返回的任何内容都需要一个析构函数(在dll端)来销毁它所指向的东西。