C ++ STL或模板和DLL

时间:2012-04-20 11:41:33

标签: c++

我可以拥有C ++共享库,其中有导出的函数返回std::vector<t>

2 个答案:

答案 0 :(得分:4)

是的,前提是DLL和使用它的C ++代码

  • 使用相同的C ++编译器构建
  • 使用相同版本的STL(这可能对STL调试定义也很敏感)
  • 使用相同的共享运行时库(即共享,调试与发布,单对多线程,相同版本),以便在同一内存堆上分配和释放对象

然后它应该工作正常。其中一些可能有一些余地,但总的来说,如果可能的话,最好是安全并保持一切相同。

答案 1 :(得分:1)

如果在std::vector<t>t是未知类型,即如果要在共享库中存储template,而不是某些固定模板实例化,答案是

需要一种方法将类型t注入共享库,但没有。

在代码中:

// This is NOT possible:
template <typename T>
std::vector<T> something () {...}

// This IS:
std::vector<int> something () {...}