我需要导出模板专业化。
以下定义是否相同?
typedef std::vector<int> MY_API MyIntArray; // (1)
template class MY_API std::vector<int>; // (2)
typedef std::vector<int> MyIntArray;
公共MY_API
宏定义看起来像#define MY_API __declspec(dllexport)
。
另一个问题是 - 模板专精化是否发生在typedef std::vector<int> MyIntArray;
?
我已经看到了一些关于在模块/ dll边界和潜在问题中使用STL
类的问题。
答案 0 :(得分:1)
否 - typedef
是#define
的稍微(但只是略微)更智能的版本,它将指定的名称与指定的类型等同。它在编译器的符号表中添加了一个条目,表示该名称代表该类型。
虽然typedef
没有做什么。它特别是不实例化指定的类型,因此它不等同于所讨论的模板的显式实例化。 (至于为什么它显式没有实例化类型:对于一个,因为你可以创建一个不完整类型的typedef
,在类型完成之前无法实例化。)