C 17允许我们推导出std :: array的模板参数.例如,我可以写
std::array ints = { 1, 2, 3 };
和ints的类型为std :: array< int,3>.
我的问题是:如果我只想指定数组的类型参数但是自动确定数组的大小,该怎么办?
以下不起作用,因为似乎必须指定所有模板参数:
std::array<size_t> sizes = { 1, 2, 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);
标签:stdarray,c,templates,c17 来源: https://codeday.me/bug/20190731/1586009.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。