我有一个带有一些模板别名的类模板。由于我只在模板上使用一组封闭的类型,我想专门化并显式实例化它们。我目前有这个:
// Header
template <typename T>
struct Literal {
Literal(std::string_view);
};
using StringLiteral = Literal<std::string>;
// Source:
StringLiteral::Literal(std::string_view){/*...*/}
我以为我需要一个extern template StringLiteral
或一些东西,但这似乎有效。我能够StringLiteral
在与专业化所在的TU完全不同的TU中使用。
我的问题是,这合法吗?如果是这样,为什么不需要显式实例化?我们无法在另一个 TU 中隐式实例化模板,因为我们没有构造函数的定义。
此外,使用模板别名进行专业化对我来说似乎很奇怪,对吗?