Advertisement
Guest User

Untitled

a guest
Jul 19th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.71 KB | None | 0 0
  1. #include <array>
  2. #include <utility>
  3.  
  4. template < class F, size_t... Ns >
  5. constexpr
  6. std::array<decltype(std::declval<F>()(size_t(0))),sizeof...(Ns)>
  7. generate_array( F&& f, std::index_sequence<Ns...> )
  8. {
  9. return { f(Ns)... };
  10. }
  11.  
  12. template < size_t N, class F >
  13. constexpr
  14. std::array<decltype(std::declval<F>()(size_t(0))),N>
  15. generate_array( F&& f ) {
  16. return generate_array( std::forward<F>(f), std::make_index_sequence<N>() );
  17. }
  18.  
  19. // Usage example
  20. struct A {
  21. constexpr explicit A(int i) : _i(i) {}
  22.  
  23. int _i;
  24. };
  25.  
  26. // Define functor. Constexpr lambda expressions are C++17 or later.
  27. constexpr A generator( size_t i ) { return A(i); }
  28.  
  29. extern constexpr std::array<A,10> a = generate_array<10>( generator );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement