1

我有以下代码:

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;

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

4

1 回答 1

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>;
    
于 2016-03-24T00:14:21.700 回答