C++ 在源文件中明确指定类模板
我有一个带有一些模板别名的类模板。因为我只在模板上使用一组封闭的类型,所以我想专门化并显式地实例化它们。我目前有:C++ 在源文件中明确指定类模板,c++,templates,template-specialization,template-instantiation,C++,Templates,Template Specialization,Template Instantiation,我有一个带有一些模板别名的类模板。因为我只在模板上使用一组封闭的类型,所以我想专门化并显式地实例化它们。我目前有: // Header template <typename T> struct Literal { Literal(std::string_view); }; using StringLiteral = Literal<std::string>; // Source: StringLiteral::Literal(std::string_view)
// Header
template <typename T>
struct Literal {
Literal(std::string_view);
};
using StringLiteral = Literal<std::string>;
// Source:
StringLiteral::Literal(std::string_view){/*...*/}
//头
模板
结构文字{
文字(std::string\u视图);
};
使用StringLiteral=Literal;
//资料来源:
StringLiteral::Literal(std::string_视图){/*…*/}
我假设我需要一个外部模板StringLiteral
或其他什么,但这似乎是可行的。我能够使用StringLiteral
,使用的TU与专业化所在的TU完全不同
我的问题是,这合法吗?如果是这样,为什么不需要显式实例化?我们无法在另一个TU中隐式实例化模板,因为我们没有构造函数的定义
此外,使用模板别名进行专门化对我来说似乎很奇怪,对吗?我似乎记得链接器看到了模板类的多个实现,假设它们都是相同的,选择一个并丢弃其他实现,如果幸运的话,它会选择正确的实现