首页 > 解决方案 > 可变模板张量类

问题描述

我正在尝试制作一个可变参数模板张量类,其中模板参数是一个类型和一组维度。

例如,创建一个包含 13 个浮点数的数组将使用Tensor<float, 13> a;并创建一个 3 阶 3 x 4 x 5 的双精度张量将使用Tensor<double, 3, 4, 5> b;. 这是针对 HPC 应用程序的。最终,所有元素都需要附加到内存中,并且应该立即分配整个对象。

该对象Tensor<double, 3, 4, 5>可能有一个类型的字段std::array<Tensor<double, 3, 4>, 5>

我在使用可变参数模板递归定义这种类型时遇到问题。我目前正在尝试以下代码,但它没有编译,并且已经没有想法了。我认为添加一个专业化模板sizeof(n) == 0是朝着正确方向迈出的一步,但没有运气。

#include <array>

template <typename T, int m, int ...n>
class Tensor {
public:
    std::array<Tensor<T, n>, m> a;
};

或者a,可以只是一个 c 型数组,无论大小是n. 我将如何计算该乘积,同时仍保留Tensor<double, 3, 4, 5> b;未初始化张量的语法?

解决方案:

std::array<Tensor<T, n>, m> a;应该是std::array<Tensor<T, n...>, m> a;,并且应该重新定义类,以便 egTensor<float, 3>是合法的。

标签: c++hpc

解决方案


std::array<Tensor<T, n>, m> a;应该是std::array<Tensor<T, n...>, m> a;,并且应该重新定义类,以便 egTensor<float, 3>是合法的。


推荐阅读