2017-03-01 8 views
2

나는 boost :: hana :: set 타입을 가지고 있으며 값이 bool 인 맵을 생성하려고합니다. hana::Foldable 그래서 당신이 hana::unpack을 사용할 수 있습니다boost hana : 집합과 기본값으로 맵 생성

// I have a hana set: 
auto my_set = hana::make_set(hana::type_c<int>, hana::type_c<float> ...); 

// and want to transform it to a map with a given runtime value as values: 
auto wanted_map = hana::make_map(
    hana::make_pair(hana::type_c<int>, false), 
    hana::make_pair(hana::type_c<float>, false), 
    ... 
); 

답변

1

hana::set이다. 이 예제를 고려하십시오

#include <boost/hana.hpp> 

namespace hana = boost::hana; 


int main() { 
    constexpr auto make_pair_with = hana::curry<2>(hana::flip(hana::make_pair)); 

    auto result = hana::unpack(
    hana::make_set(hana::type_c<int>, hana::type_c<float>), 
    hana::make_map ^hana::on^ make_pair_with(false) 
); 

    auto expected = hana::make_map(
    hana::make_pair(hana::type_c<int>, false), 
    hana::make_pair(hana::type_c<float>, false) 
); 

    BOOST_HANA_RUNTIME_ASSERT(result == expected); 
} 
+0

좋아요, 감사합니다! :-디 –

1

제이슨의 대답은 완벽하지만, 여기에 대신 람다를 사용하여 같은 일이다 (나는 보통이 더 읽기 찾기) :

#include <boost/hana.hpp> 
namespace hana = boost::hana; 


int main() { 
    auto types = hana::make_set(hana::type_c<int>, hana::type_c<float>); 
    auto result = hana::unpack(types, [](auto ...t) { 
    return hana::make_map(hana::make_pair(t, false)...); 
    }); 

    auto expected = hana::make_map(
    hana::make_pair(hana::type_c<int>, false), 
    hana::make_pair(hana::type_c<float>, false) 
); 

    BOOST_HANA_RUNTIME_ASSERT(result == expected); 
}