C++的n维向量的模板别名

3
我希望有一个简单的包装器来处理N维向量,例如vector<vector<vector<double>>>等等。更确切地说,我想在代码中写类似于NDvector<3,double>而不是vector<vector<vector<double>>>。实现这个的最优雅的方法是什么?我的想法是编写类似于以下的代码:
template<size_t N, typename T>
using NDvector = vector<NDvector<N-1, T>>;

template<typename T>
using NDvector<1,T> = vector<T>;

然而,这个无法编译。
1个回答

7

类型别名 无法进行部分特化;

无法对别名模板进行部分显式特化。

您可以添加一个可进行部分特化的类模板。例如:

template<size_t N, typename T>
struct NDvector_S {
    using type = vector<typename NDvector_S<N-1, T>::type>;
};
template<typename T>
struct NDvector_S<1, T> {
    using type = vector<T>;
};

template<size_t N, typename T>
using NDvector = typename NDvector_S<N, T>::type;

然后您可以将其用作
NDvector<3, double> v3d; // => std::vector<std::vector<std::vector<double>>>

1
也许不如我在理想世界中希望看到的那样优雅,但完全可用! - Yauhen Yakimenka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接