У меня есть следующий код:
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;
Мне нужен тип для хранения карты члена класса.
Если вам действительно нужен тип заранее, вот два возможных решения:
Вы можете просто обернуть одно и то же выражение в 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)
));
Для вашего случая использования того же типа, что и ключ, вы можете создать простой шаблон псевдонима типа.
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>;
Других решений пока нет …