我有以下(无法编译的)代码:
template< size_t N >
void foo( std::array<int, N> )
{
// Code, where "N" is used.
}
int main()
{
foo( { 1,2 } );
}
在这里,我想将任意数量的int传递给函数foo--为了方便起见,我将使用std :: initializer_list表示法。 我尝试使用std :: array来聚合int(如上面的代码所示),然而,由于int作为std :: initializer_list传递,编译器无法推导出数组大小。
使用std :: initializer_list而不是std :: array也无法解决问题,因为(与std :: array相比),std :: initializer_list的大小未被捕获为模板参数。
有人知道可以使用哪种数据结构,以便可以使用std :: initializer_list记号传递int,而不需要显式传递foo的模板参数N吗?
非常感谢。
std::initializer_list::size
是一个constexpr函数。那就可以了吧? - StoryTeller - Unslander Monicafoo(1,2)
(无论有多少个参数)是否可行? - krzaqconstexpr
函数,则似乎不可行。 - StoryTeller - Unslander Monicathis
,那么对象参数不需要是constexpr
,但我们无法知道它是否这样做。回答你的问题:参数不能是constexpr
,但我们可能会有其他情况。 - Columbo