【发布时间】:2016-12-18 07:45:00
【问题描述】:
模板元编程如何在此处 (static const int value = 1 + StarCounter<\U>::value;) 打印出 3?
#include <iostream>
template <typename T>
struct StarCounter
{
static const int value = 0;
};
template <typename U>
struct StarCounter<U*>
{
static const int value = 1 + StarCounter<U>::value;
};
int main()
{
std::cout << StarCounter<int***>::value << std::endl;//How is it printing 3?
return 0;
}
【问题讨论】:
-
创建代码示例时,请不要省略包含指令。复制粘贴和编译代码真的很痛苦
-
这是显式特化如何工作的一个非常基本的示例。您是否阅读过任何有关模板显式特化的内容?
-
这是一个足够简单的案例,您可以自己推断。
StarCounter<int***>与StarCounter<U*>相同,其中U是int**,然后使用StarCounter<int**>等等... -
你能去掉
StarCounter<\U>::value里面多余的\吗? (我不能进行单字符编辑)
标签: c++ templates template-meta-programming