类型定义语句是否相等

Are type definition statements equal?

本文关键字:是否 语句 定义 类型      更新时间:2023-10-16

我需要导出模板专用化。

以下定义是否相等

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类和潜在问题的问题

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

然而,typedef只起到了这个作用。它具体地执行而不是实例化指定的类型,因此它不等同于所讨论的模板的显式实例化。(至于为什么它明确不实例化类型:首先,因为你可以创建一个不完整类型的typedef,在类型完成之前无法实例化)。