使用多维数组的 C++ 模板

标签 c++ c++11 templates using

在 C++ 中是否可以这样写:

template <typename T, size_t dim, size_t len>
using A = /* something */;

这将使这两行等价:

/* 1 */ A<int, 3, 5> a;   A<char, 5, 3> c;

/* 2 */ int a[5][5][5];   char c[3][3][3][3][3];

?

最佳答案

这可能吗?是的,您可以在编译时进行任意复杂的计算,所以肯定有解决方案。

最直接的方法就是使用模板递归,如下所示:

template <class T, size_t dim, size_t len>
struct A_helper {
    using type = typename A_helper<T, dim - 1, len>::type[len];
};

template <class T, size_t len>
struct A_helper<T, 0, len> {
    using type = T;
};

template <class T, size_t dim, size_t len>
using A = typename A_helper<T, dim, len>::type;

在 Coliru 上查看:http://coliru.stacked-crooked.com/a/bfc9052b30bce553

关于使用多维数组的 C++ 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47363763/

相关文章:

c++ - C++ 递归类型定义是否可能,特别是我可以将 vector<T> 放在 T 的定义中吗?

c++ - 使用带有多重继承的enable_shared_from_this

c++ - 定义模板化运算符重载时出错

python - 将 Django 指向不同的模板目录

c++ - msvc2013 的 decltype 模板出错

c++ - std::forward 和 operator()

C++二维 vector 导致缓冲区溢出

c++ - 在 Visual Studio 中制作可私有(private)符号化的发布版本的正确方法是什么?

c++ - 为什么我的 SFINAE 表达式不再适用于 GCC 8.2?

c++ - Boost Multi-Index 中的多索引查询