【发布时间】:2017-10-05 22:10:20
【问题描述】:
为什么编译失败:
template<typename T, int N>
using vec = vector<vec<T, N - 1>>;
template<typename T>
using vec<0> = T;
虽然只是将它嵌套到结构中就可以了:
template<typename T, int N>
struct foo {
using vec = vector<typename foo<T, N - 1>::vec>;
};
template<typename T>
struct foo<T, 0> {
using vec = T;
};
如果您可以用更详细的结构替换它,那么禁止别名中的递归的基本原理是什么?
【问题讨论】:
-
你不能专门化模板别名,所以它无论如何也行不通。但仍然是一个有趣的问题。
标签: c++ templates recursion alias template-meta-programming