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

c – std :: array的部分模板参数推导或解决方法?

发布时间:2020-12-16 09:22:40 所属栏目:百科 来源:网络整理
导读:C 17允许我们推导出std :: array的模板参数.例如,我可以写 std::array ints = { 1,2,3 }; 和ints的类型为std :: array int,3. 我的问题是:如果我只想指定数组的类型参数但是自动确定数组的大小,该怎么办? 以下不起作用,因为似乎必须指定所有模板参数: std
C 17允许我们推导出std :: array的模板参数.例如,我可以写

std::array ints = { 1,2,3 };

和ints的类型为std :: array< int,3>.

我的问题是:如果我只想指定数组的类型参数但是自动确定数组的大小,该怎么办?

以下不起作用,因为似乎必须指定所有模板参数:

std::array<size_t> sizes = { 1,3 };

我的编译器抱怨并说:’std :: array’:模板参数太少了.

是否可以通过模板参数推导自动确定数组的大小?如果没有,是否可以通过仅指定其类型而不是其大小来创建数组?

解决方法

据我所知,这是不可能做到的.但帮助方法可以解决这个问题:

template<typename Type,typename ... T>
constexpr auto makeArray(T&&... t) -> std::array<Type,sizeof...(T)>
{
    return {{std::forward<T>(t)...}};
}

用法示例:

const auto container = makeArray<double>(-5.0,0.0,5.0,10.0);

(编辑:李大同)

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

    推荐文章
      热点阅读