相关部分归结为:
template <typename T,size_t N>class foo{ T data[N]; constexpr foo(T val) { // initialize data with N copIEs of val }};
使用std :: fill或循环与constexpr要求不兼容.初始化:data {val}仅设置数组的第一个元素,并对剩余部分进行零初始化.
怎么能实现这一目标?
我觉得应该有一个可变参数模板和元组等的解决方案……
解决方法 非常奇怪的是,问题的解决方案存在于c 14中(在gcc上使用-std = c 1y编译示例;另请参阅Praetorian的更详细的c 11解决方案的注释):template <size_t N>struct bar { template <typename T,typename ...Tn> static constexpr auto apply(T v,Tn ...vs) { return bar<N - 1>::apply(v,v,vs...); }};template <>struct bar<1> { template <typename T,Tn ...vs) { return std::array<T,sizeof...(vs) + 1>{v,vs...}; }};template <typename T,size_t N>struct foo { std::array<T,N> data; constexpr foo(T val) : data(bar<N>::apply(val)) {}};
(我用std :: array替换了POD数组 – 假设它不会对你的用例造成任何问题).
现场示例如下:http://coliru.stacked-crooked.com/a/4731a10ee54563b9
总结以上是内存溢出为你收集整理的C 11在constexpr函数中初始化具有统一值的数组全部内容,希望文章能够帮你解决C 11在constexpr函数中初始化具有统一值的数组所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)