【发布时间】:2017-03-07 14:03:15
【问题描述】:
我有以下(不可编译的)代码:
template< size_t N >
void foo( std::array<int, N> )
{
// Code, where "N" is used.
}
int main()
{
foo( { 1,2 } );
}
在这里,我想将任意数量的ints 传递给函数foo——为方便起见,我将使用std::initializer_list 表示法。
我尝试使用std::array 来聚合ints(如上面的代码所示),但是,由于ints 作为std::initializer_list 传递,编译器无法推断出数组大小。
使用std::initializer_list 代替std::array 也不能解决问题,因为(与std::array 相比)std::initializer_list 的大小不会被捕获为模板参数。
有谁知道可以使用哪种数据结构,以便可以通过使用std::initializer_list 表示法而不显式传递foo 的模板参数N 来传递ints?
在此先感谢
【问题讨论】:
-
请注意,
std::initializer_list::size是自 c++14 以来的 constexpr 函数。这样不行吗? -
@StoryTeller 不行,因为对象参数必须是
constexpr,而函数参数不能是constexpr。 -
调用
foo(1,2)(对于任意数量的参数)对您有用吗? -
@Columbo,你确定吗?
constexpr函数如果参数不能是consexpr似乎不可行。 -
@StoryTeller 好吧...严格来说,如果正文没有相应地使用
this,则对象参数不必是constexpr,但我们不知道它是否使用。回答您的问题:参数不能是constexpr,但我们可以有其他场景。
标签: c++ c++14 initializer-list template-argument-deduction