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