Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在源文件中明确指定类模板_C++_Templates_Template Specialization_Template Instantiation - Fatal编程技术网

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中隐式实例化模板,因为我们没有构造函数的定义


此外,使用模板别名进行专门化对我来说似乎很奇怪,对吗?

我似乎记得链接器看到了模板类的多个实现,假设它们都是相同的,选择一个并丢弃其他实现,如果幸运的话,它会选择正确的实现