我有一个封装向量和形状的结构体,如下所示:
template <std::size_t N>
struct array_type {
std::array<std::size_t, N> shape;
std::vector<float> data;
};
我希望能够从任何数组
float[N]
, float[N][M]
等构建一个 array_type
。目前,我对于每个秩都有一个函数,例如:
template <std::size_t N>
array_type<1> _1d(const deel::formal::float_type (&values)[N]) {
return {{N},
std::vector<float_type>(
reinterpret_cast<const float_type*>(values),
reinterpret_cast<const float_type*>(values) + N)};
}
template <std::size_t N>
array_type<2> _2d(const deel::formal::float_type (&values)[N][M]) {
return {{N, M},
std::vector<float_type>(
reinterpret_cast<const float_type*>(values),
reinterpret_cast<const float_type*>(values) + N * M)};
}
我希望写一些类似这样的内容:
template <class Array>
array_type<std::rank_v<Array>> make_array(Array const&);
...但这对于初始化列表不起作用:
auto arr1 = _1d({1, 2, 3}); // Ok
auto arr2 = make_array({1, 2, 3}); // Ko
有没有一种方法可以创建这个
make_array
函数?或者(因为我认为这是不可能的)至少有像make_array<1>({1,2,3})
这样显式指定秩的东西吗?
make_array({1, 2, 3})
无法工作,因为模板类型Array
是问题的关键。 - Holt