Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <array>
- #include <utility>
- template < class F, size_t... Ns >
- constexpr
- std::array<decltype(std::declval<F>()(size_t(0))),sizeof...(Ns)>
- generate_array( F&& f, std::index_sequence<Ns...> )
- {
- return { f(Ns)... };
- }
- template < size_t N, class F >
- constexpr
- std::array<decltype(std::declval<F>()(size_t(0))),N>
- generate_array( F&& f ) {
- return generate_array( std::forward<F>(f), std::make_index_sequence<N>() );
- }
- // Usage example
- struct A {
- constexpr explicit A(int i) : _i(i) {}
- int _i;
- };
- // Define functor. Constexpr lambda expressions are C++17 or later.
- constexpr A generator( size_t i ) { return A(i); }
- extern constexpr std::array<A,10> a = generate_array<10>( generator );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement