Dan*_* M. 5 c++ recursion alias templates template-meta-programming
为什么编译失败:
template<typename T, int N>
using vec = vector<vec<T, N - 1>>;
template<typename T>
using vec<0> = T;
Run Code Online (Sandbox Code Playgroud)
而将它嵌套到结构中就可以了:
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;
};
Run Code Online (Sandbox Code Playgroud)
如果您可以用更详细的构造替换它,那么禁止别名中的递归的理由是什么?
参见: https: //godbolt.org/g/YtyhvL
如果您可以用更详细的构造替换它,那么禁止别名中的递归的理由是什么?
你在那里回答了你自己的问题。你有做你想做的事情的机制。既然根据定义,别名只是某种东西的简写,为什么还要让已经很复杂的语法变得复杂呢?
您可以使用结构来实现机制,并使用别名来提供漂亮的类型名称:
template<typename T, int N>
using vec = typename foo<T,N>::vec;
Run Code Online (Sandbox Code Playgroud)
简短而甜蜜,语言语法更简单。
| 归档时间: |
|
| 查看次数: |
239 次 |
| 最近记录: |