【发布时间】:2021-12-21 17:44:51
【问题描述】:
我正在尝试创建一个将std::array 作为模板参数的类模板。目前声明如下:
template<typename T, std::size_t N, std::array<std::size_t, N> A>
class Foo {
...
}
然而,这很不幸,因为我通常会使用初始化列表来初始化 A,这使得指定 N 的需要变得乏味且多余:
// Current
Foo<int, 3, {5, 3, 4}> bar;
// Preferred
Foo<int, {5, 3, 4}> baz;
我曾尝试使用类似于模板模板参数的东西无济于事:
template<typename T, template<std::size_t N> std::array<std::size_t, N> A>
有没有办法完成我正在尝试做的事情,或者通过将 N 放在参数列表中的 A 之后来“隐藏”它?
【问题讨论】:
-
关于“我通常会用初始化列表初始化
arr”,arr是什么?另外,请说明您将如何创建 Foo 的实例。 -
@cigien 已编辑,谢谢
-
为什么不将
using A = std::array<std::size_t, N>;添加到您的模板类中? -
@paddy 到底有什么帮助?我不相信这会让您将数组指定为模板参数,对吗?
-
如果您没有义务使用数组作为参数:
template<typename T, size_t... ARR_ELEMENTS>。然后你可以使用static constexpr std::array<size_t, sizeof...(ARR_ELEMENTS)> A = {ARR_ELEMENTS...};在类中创建数组。
标签: c++ arrays templates c++20