c++ - 模板模板参数:以下示例中应用了什么规则
问题描述
假设以下示例
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>
这样Y
并且Z
是同一件事。
并且不是真的X<Z>
被翻译成X<Y<T>>
(并且X<Y<T>>
不能匹配,因为Y<T>
它是一种X
只接受模板模板参数的类型)。
推荐阅读
- android - 不能使用 import android.support.test.rule.ActivityTestRule
- r - 如何生成特定区间内的正态分布随机数?
- javascript - 来自两个对象数组的 3D 数组
- javascript - 悬停时图表js显示旧值
- python-2.7 - tensorflow对象检测API:生成自定义数据集的TF记录
- c# - 如何使用 Jquery Ajax 将参数传递给 mvc ActionResult?
- algorithm - 在遗传算法中挑选育种者
- three.js - 容器中的三个.js raycaster
- angularjs - 未捕获的 ReferenceError:未定义 myFunc
- java - 当有人接听电话时如何检测电话状态