2015-09-27 98 views
1

是像下面的boost :: MPL ::類型和字符的字符串的地圖

typedef boost::mpl::map< 
     pair<int,"int"> 
    , pair<long,"long"> 
    , pair<bool,"bool"> 
    > m; 

可能嗎?如果不是,有什麼選擇?

+3

我想你想一個'提振::融合:: map'。我猜'boost :: mpl :: string'作爲'boost :: mpl :: pair'中的第二個參數也可以。 – llonesmiz

回答

2

如果你可以使用C++編譯器14(目前僅鏘> = 3.5),你可以使用Boost.Hana

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

auto m = hana::make_map(
    hana::make_pair(hana::type_c<int>, BOOST_HANA_STRING("int")), 
    hana::make_pair(hana::type_c<long>, BOOST_HANA_STRING("long")), 
    hana::make_pair(hana::type_c<bool>, BOOST_HANA_STRING("bool")) 
); 

// These assertions are done at compile-time 
BOOST_HANA_CONSTANT_ASSERT(m[hana::type_c<int>] == BOOST_HANA_STRING("int")); 
BOOST_HANA_CONSTANT_ASSERT(m[hana::type_c<long>] == BOOST_HANA_STRING("long")); 
BOOST_HANA_CONSTANT_ASSERT(m[hana::type_c<bool>] == BOOST_HANA_STRING("bool")); 

如果你也願意使用支持非標準的GNU擴展(至少)由鐺和GCC,你甚至可以做以下的拖放醜陋BOOST_HANA_STRING宏:

#define BOOST_HANA_CONFIG_ENABLE_STRING_UDL 

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

constexpr auto m = hana::make_map(
    hana::make_pair(hana::type_c<int>, "int"_s), 
    hana::make_pair(hana::type_c<long>, "long"_s), 
    hana::make_pair(hana::type_c<bool>, "bool"_s) 
); 

static_assert(m[hana::type_c<int>] == "int"_s, ""); 
static_assert(m[hana::type_c<long>] == "long"_s, ""); 
static_assert(m[hana::type_c<bool>] == "bool"_s, ""); 
相關問題