有没有办法获得地图类型?

时间:2016-03-23 18:25:29

标签: c++ boost boost-hana

我有以下代码:

auto myMap = hana::make_map(
    hana::make_pair(hana::type_c<int>, 2),
    hana::make_pair(hana::type_c<char const*>, "hi"),
    hana::make_pair(hana::type_c<double>, 3.0)
);

有没有办法知道&#39; myMap&#39;预先?我尝试用:

using MyMap = hana::map<hana::pair<hana::type<int>, int>, ...>; 

但它失败了,因为decltype(myMap)是hana :: map&lt;实现定义&gt;。是否有一种&#39; result_of&#39; meta函数会给出imp-defined类型?喜欢:

using MyMap = typename hana::result_of_map<hana::pair<hana::type<int>, int>, ...>::type;

我需要类型来存储类成员映射。

1 个答案:

答案 0 :(得分:3)

如果你真的需要这种类型,这里有两种可能的解决方案:

  1. 您可以在decltype中包含相同的表达式。

    using MyMap = decltype(hana::make_map(
        hana::make_pair(hana::type_c<int>, 2),
        hana::make_pair(hana::type_c<char const*>, "hi"),
        hana::make_pair(hana::type_c<double>, 3.0)
    ));
    
  2. 对于使用与键相同类型的用例,您可以创建一个简单的类型别名模板。

    template <typename ...T>
    using type_map_t = decltype(hana::make_map(hana::make_pair(hana::type_c<T>, std::declval<T>())...));
    
    using MyMap = type_map_t<int, char const*, double>;
    
相关问题