大佬教程收集整理的这篇文章主要介绍了c – 具有constexpr的查找表,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
int a[n][2] = {{0,1},{2,3},... }
对于给定的n,在编译时创建.我开始研究constexpr,但是似乎是一个返回一个constexpr的函数std :: vector< std :: array< int,2> >不是一个选择,因为我得到:
invalid return type 'std::vector<std::array<int,2ul> >' of constexpr function
如何创建这样的编译时间数组?
指数为了扩展包(在这里需要应用生成器),由Xeo从this answer修改为使用std :: size_t而不是unsigned.
#include <cstddef> // by Xeo,from https://stackoverflow.com/a/13294458/420683 template<std::size_t... Is> struct seq{}; template<std::size_t N,std::size_t... Is> struct gen_seq : gen_seq<N-1,N-1,Is...>{}; template<std::size_t... Is> struct gen_seq<0,Is...> : seq<Is...>{};
发电机功能:
#include <array> template<class Generator,std::size_t... Is> constexpr auto generate_array_helper(Generator g,seq<Is...>) -> std::array<decltype(g(std::size_t{},sizeof...(Is))),sizeof...(Is)> { return {{g(Is,sizeof...(Is))...}}; } template<std::size_t tcount,class Generator> constexpr auto generate_array(Generator g) -> decltype( generate_array_helper(g,gen_seq<tcount>{}) ) { return generate_array_helper(g,gen_seq<tcount>{}); }
用法示例:
// some literal type struct point { float x; float y; }; // output support for `std::ostream` #include <iostream> std::ostream& operator<<(std::ostream& o,point const& p) { return o << p.x << "," << p.y; } // a user-defined generator constexpr point my_generator(std::size_t curr,std::size_t total) { return {curr*40.0f/(total-1),curr*20.0f/(total-1)}; } int main() { constexpr auto first_array = generate_array<5>(my_generator); constexpr auto second_array = generate_array<10>(my_generator); std::cout << "first array: \n"; for(auto p : first_array) { std::cout << p << '\n'; } std::cout << "========================\n"; std::cout << "second array: \n"; for(auto p : second_array) { std::cout << p << '\n'; } }
以上是大佬教程为你收集整理的c – 具有constexpr的查找表全部内容,希望文章能够帮你解决c – 具有constexpr的查找表所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。