类型定义语句是否相等?

时间:2013-12-03 05:59:21

标签: c++ templates template-specialization dllexport

我需要导出模板专业化。

以下定义是否相同?

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类的问题。

1 个答案:

答案 0 :(得分:1)

否 - typedef#define的稍微(但只是略微)更智能的版本,它将指定的名称与指定的类型等同。它在编译器的符号表中添加了一个条目,表示该名称代表该类型。

虽然typedef没有做什么。它特别是实例化指定的类型,因此它不等同于所讨论的模板的显式实例化。 (至于为什么它显式没有实例化类型:对于一个,因为你可以创建一个不完整类型的typedef,在类型完成之前无法实例化。)