【问题标题】:Is there a way to obtain the map type?有没有办法获取地图类型?
【发布时间】:2016-03-23 18:25:29
【问题描述】:

我有以下代码:

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)
);

有没有办法事先知道“myMap”的类型?我试试看:

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

但它失败了,因为 decltype(myMap) 是 hana::map。是否有一种“result_of”元函数可以提供 imp 定义的类型?喜欢:

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

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

【问题讨论】:

    标签: c++ boost boost-hana


    【解决方案1】:

    如果您真的需要预先输入的类型,这里有两种可能的解决方案:

    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>;
      

    【讨论】:

    • 这是正确的答案,但请注意decltype(hana::make_map(...)) 是一头丑陋的野兽:您不能在其上使用模式匹配,并且您不应该期望两个相等的映射具有相同的类型(因为地图的顺序并不重要)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 2019-07-16
    • 1970-01-01
    • 2010-11-05
    相关资源
    最近更新 更多