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

Is there a way to obtain the map type?

我有以下代码:

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< implementation-defined >。是否有一种 'result_of' 元函数可以提供 imp 定义的类型?喜欢:

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

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

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

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