模板模板参数:以下示例中应用了什么规则
Template Template Parameters: What rule is applied in the following example
假设以下示例
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
只接受模板模板参数的类型(。
相关文章:
- 什么是仅调用一次并调用参数的控制台应用
- 模板模板参数:以下示例中应用了什么规则
- 我应该使用什么信号来终止/终止Windows上的应用程序
- 什么是'do while loop'的真实应用?
- 在Qt Creator中应用代码更改的快捷方式是什么?
- 在Windows Server 2012上运行VS2019编译的应用程序需要什么?
- 如果在 DLL 和调用应用程序中使用 GPGPU API,会发生什么情况
- 在 Objective-C++ 中应用于__weak指针时,通过关键字推导类型"auto"规则是什么?
- 应用程序仅在安装了 Visual Studio 的 PC 上启动.这种行为的原因可能是什么
- 部署C 应用程序,什么重新分布
- 如果我在库中和应用程序中编译了相同的CPP文件,会发生什么
- "std::swap"应用于这些对象时会做什么?
- 有什么理由更喜欢从 IDE 中运行应用程序而不是运行独立的可执行文件?
- 开发C++应用程序,目标服务器有不同的std lib版本,最佳实践是什么
- pimpl 在 C++ 应用程序/库中的什么位置使用?任何例子
- 从应用程序调用静态库时,QT创建者什么都不会发生
- 将大量数据从C 应用程序传递到SQLServer存储过程的最快方法是什么?
- 将函子应用于设备数组的子集的最有效方法是什么
- 生成代码以与不需要重新编译的正在运行的 cpp 应用程序交互的好方法是什么?
- 测试使用visual studio编写的C++android应用程序的最佳方法是什么.不升级到windows专业版