模板模板参数:以下示例中应用了什么规则

Template Template Parameters: What rule is applied in the following example

本文关键字:应用 什么 规则 参数      更新时间:2023-10-16

假设以下示例

using namespace std;
template <template <typename> class>
struct X 
{
X() 
{ 
std::cout << "1"; 
}
};
template <typename>
struct Y {};
template <typename T>
using Z = Y<T>;
template <>
struct X<Y> 
{
X() 
{ 
std::cout << "2"; 
}
};
int main() 
{
X<Y> x1;
X<Z> x2;
}

表达式X<Y> x1很明显,使用打印"2"的专业化

第二个很奇怪。进行分析时,X<Z>被转换为X< Y < T > >。我希望打印"1".但是运行代码会打印"2"。第二个规则应用了哪个规则?

第二个很奇怪。进行分析时,X<Z>被转换为X< Y < T > >。我希望打印"1".但是运行代码会打印"2"。

不。

你有那个Z<T>被定义为Y<T>所以YZ是一回事。

而且X<Z>被翻译成X<Y<T>>并不是真的(X<Y<T>>无法匹配,因为Y<T>是一种X只接受模板模板参数的类型(。

相关文章: