gpt4 book ai didi

N 维 vector 的 C++ 模板化别名

转载 作者:行者123 更新时间:2023-12-02 00:08:34 24 4
gpt4 key购买 nike

我想要一些 N 维 vector 的简单包装,例如 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>;

但是,这个无法编译。

最佳答案

Type alias不能部分特化;

It is not possible to partially or explicitly specialize an alias template.

您可以添加一个可以部分专用的类模板。例如

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>>>

关于N 维 vector 的 C++ 模板化别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59495350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com