5

To wydaje się dość podstawową rzeczą do zrobienia, więc szukam bardziej lub bardziej mniej krótkie, wbudowane i łatwe do odczytania rozwiązanie.
Najkrótsza rzeczy udało mi się pojąć toJak zbudować hana :: tuple_t <T, T, T, ...> biorąc pod uwagę T i liczbę elementów n

hana::unfold_left<hana::tuple_tag>(hana::int_c<n>, [] (auto count) { 
      return hana::if_(count == hana::int_c<0>, hana::nothing, 
          hana::just(hana::make_pair(count - hana::int_c<1>, 
                 hana::type_c<T>))); 
     }); 

który jest daleki od bycia krótki i czytelny ...

+1

'Hana :: replicate' wydaje się właściwe. – llonesmiz

Odpowiedz

3

Jak podkreślił @jv_ hana::replicate może zrobić dokładnie to.
Przykład w dokumentacji referencyjnej daje wystarczająco dużo informacji o tym, jak to osiągnąć:

// Copyright Louis Dionne 2013-2016 
// Distributed under the Boost Software License, Version 1.0. 
// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) 

#include <boost/hana/equal.hpp> 
#include <boost/hana/integral_constant.hpp> 
#include <boost/hana/optional.hpp> 
#include <boost/hana/replicate.hpp> 
#include <boost/hana/tuple.hpp> 

namespace hana = boost::hana; 
static_assert(hana::replicate<hana::tuple_tag>('x', hana::size_c<2>) == hana::make_tuple('x', 'x'), ""); 
// Of course, there can't be more than one element in an `optional`. 
static_assert(hana::replicate<hana::optional_tag>('x', hana::size_c<2>) == hana::just('x'), ""); 
int main() { } 
Powiązane problemy