假设我有以下功能模板:
int bar();
template <std::size_t... Is>
void foo()
{
constexpr auto N = sizeof...(Is);
int a[N] {/* magic here, like bar()... */};
}
我想用a
N
s初始化数组bar()
。我提出的第一个解决方案如下:
int a[N] {(Is, bar())...};
但它导致一些“表达结果未使用”警告。
如果我不想关闭-Wunused-value
标志,怎么能摆脱这些警告?或者还有其他方法可以写N
bar()
吗?最好不仅解决方案适用于bar()
,而且适用于任何不依赖于Is
的表达式。
编辑:使用初始化数组只是一个例子。还有许多其他上下文需要这样的表达式序列(例如,用于另一个模板的参数)。所以我真正想要的是如何生成这样的序列而不是初始化数组。
答案 0 :(得分:3)
此解决方案需要两个步骤,但您可以执行初始化数组,然后使用值std::fill_n
执行此操作。
template <std::size_t... Is>
void foo()
{
constexpr auto N = sizeof...(Is);
int a[N];
std::fill_n(a, N, bar());
}
答案 1 :(得分:3)