2017-03-01 6 views
2

私はboost :: hana ::タイプのセットを持っており、その値がブール値であるマップを作成したいと思います。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あなたがhana::unpackを使用できるようにhana::Foldableです。この例を考えてみましょう:

#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

グレート、ありがとうございました! :-D –

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); 
} 
関連する問題