加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 初始化列表大小的Deduce模板参数

发布时间:2020-12-16 10:04:23 所属栏目:百科 来源:网络整理
导读:我有以下(不可编译)代码: template size_t N void foo( std::arrayint,N ){ // Code,where "N" is used.}int main(){ foo( { 1,2 } );} 在这里,我想将一个任意数量的int传递给函数foo – 为方便起见,我将使用std :: initializer_list表示法. 我试图使用std
我有以下(不可编译)代码:

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表示法传递整数,而不显式传递foo的模板参数N?

提前谢谢了

解决方法

多亏了 core issue 1591,你可以使用

template <std::size_t N>
void foo( int const (&arr)[N] )
{
  // Code,where "N" is used.
}

foo({1,2,3});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读