[英]How to expand a pattern without parameter pack?
假设我有以下功能模板:
int bar();
template <std::size_t... Is>
void foo()
{
constexpr auto N = sizeof...(Is);
int a[N] {/* magic here, like bar()... */};
}
我想用N
bar()
初始化数组a
。 我想到的第一个解决方案如下:
int a[N] {(Is, bar())...};
但这会导致一些“表达式结果未使用”警告。
如果我不想关闭-Wunused-value
标志,如何摆脱这些警告? 还是有其他写N
bar()
的方法? 最好该解决方案不仅适用于bar()
,而且适用于任何不依赖Is
表达式。
编辑:使用初始化数组只是一个例子。 还有许多其他上下文需要这样的表达式序列(例如,用于另一个模板的参数)。 所以我真正想要的是如何生成这样的序列而不是初始化数组。
该解决方案需要两个步骤,但是您可以执行以下操作:初始化数组,然后使用值std::fill_n
。
template <std::size_t... Is>
void foo()
{
constexpr auto N = sizeof...(Is);
int a[N];
std::fill_n(a, N, bar());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.