DLL 境界を越えて STL コンテナーを公開することはお勧めできません。また、一般的には不可能です (理由についてはこの回答を参照してください。また、dll 境界を越えて std::list を公開することについては、この回答を参照してください)。異なる (VC08/VC10+) コンパイラでコンパイルされた DLL と EXE の間でデータを渡すことができる必要があります。この Qは、すべてが同じであることのみを扱います。
それらを公開する最良の方法は何ですか?ベクトルは、メモリが連続していることが保証されているという点でリストとは少し異なります。したがって、double の const ベクトルのみが必要な場合は、DLL 内の関数へのブロックへの開始ポインタと終了ポインタを提供するだけでよいでしょうか? dll は、ベクトルの配列などの構造を返す必要もあります。
開始ポインターと終了ポインターを含む構造体について疑問に思いました。
template <typename T>
struct vecWrapper<T> {
T* begin;
T* end;
}
// in the dll
int func(vecWrapper<double> numbers);
それは賢明でしょうか?おそらく、関数から返されるものはすべて、それが指すものを破壊するデストラクタ (dll 側) が必要になります。