是否有可能做到这一点
int foo(){ static int i=0; ret = i++; return ret;}const std::array<int,3> arr = {{foo(),foo(),foo()}};
在(模板?)函数中或指定“用于初始化每个成员的调用foo”的方式?
const std::array<int,3> arr = fill_with_foo<3,foo>();
对于上下文,arr是队列中的缓冲区,从中读取N个元素(在编译时已知).目前我正在使用代码生成来创建长格式,并且我有一个函数,它只是简单地分配一个普通数组,用for循环填充它并返回数组,但我想知道是否有可能让缓冲区数组为const.
//编辑:与链接的“复制”不同,我需要
int foo();
在编译时是不确定的,即我认为constexpr是不可能的(正如我所说,它需要从运行时填充的队列中读取).我主要对删除无用的副本感兴趣
解决方法 由于C 14可以使用 std::index_sequnce(或者为旧版本手动实现):namespace detail{template<typename T,std::size_t N,typename F,std::size_t... I>constexpr std::array<T,N> construct(F&& func,std::index_sequence<I...>){ return { { (static_cast<voID>(I),func())... } };}template<typename T,typename F>constexpr std::array<T,N> construct(F&& func){ return construct<T,N>(std::forward<F>(func),std::make_index_sequence<N>());}}
然后您可以按如下方式应用它:
const auto array = detail::construct<T,3>(foo);
FULL CODE
还要注意constexpr即使在编译时也能构造std :: array.
EXAMPLE
总结以上是内存溢出为你收集整理的c – 可以用重复的函数调用初始化const std :: array吗?全部内容,希望文章能够帮你解决c – 可以用重复的函数调用初始化const std :: array吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)