Есть ли способ получить тип карты?

У меня есть следующий код:

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;

Мне нужен тип для хранения карты члена класса.

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

Другие решения

Других решений пока нет …