Я работаю с типом HashMap, который не указывает свой KeyType в качестве открытого члена, только ValueType. Для получения KeyType можно использовать std::result_of
с методом HashMap<>::Entry::GetKey()
. Я не могу заставить его работать в шаблоне.
template <typename K, typename V>
class Map {
public:
using ValueType = V;
class Entry {
public:
K GetKey();
};
};
Это прекрасно работает:
using M = Map<int, float>;
using T = std::result_of<decltype(&M::Entry::GetKey)(M::Entry)>::type;
static_assert(std::is_same<T, int>::value, "T is not int");
Но как мне сделать это из шаблона, где M
является параметром типа шаблона? Я попытался использовать вышеуказанное и вставить typename
ключевые слова безуспешно.
template <typename M>
struct GetKeyType {
using T = std::result_of<decltype(&(typename M::Entry)::GetKey)(typename M::Entry)>::type;
};
using T = GetKeyType<Map<int, float>>::T;
static_assert(std::is_same<T, int>::value, "T is not R");