c++ - 可变模板张量类
问题描述
我正在尝试制作一个可变参数模板张量类,其中模板参数是一个类型和一组维度。
例如,创建一个包含 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>
是合法的。
解决方案
std::array<Tensor<T, n>, m> a;
应该是std::array<Tensor<T, n...>, m> a;
,并且应该重新定义类,以便 egTensor<float, 3>
是合法的。
推荐阅读
- reactjs - ./activetenant' 不包含名为 'ActiveTenant' 的导出
- c++ - 断开连接后重新连接 boost beast (asio) websocket 和 http 连接时出错
- css - CSS:段落不应该内联显示
- swift - 授权 HealthKit 时 iOS + WatchKit 应用程序错误 – containerAppExtensionEntitlementsWithCompletion: failed with error
- python - 如何使用 PpenCv 在图像中勾勒人体轮廓?
- css - 当 CSS 移动到 CDN 时,即使 CSS 文件可访问,离子图标也会消失
- javascript - 文件上传 - Node Js(Express) 到 React Js。如何获得正确的图像路径?
- r - 在图中计算邻居时遇到问题
- highcharts - Highchart 注释卷轴
- c# - 如何将用户导航到 Xamarin iOS 中的另一个视图控制器