У меня есть шаблонные структуры. struct foo имеет вложенный тип.
template<typename Data>
struct Bar{
};
template<typename Data>
struct Foo {
typedef typename std::pair<Bar<Data>*,Foo<Data>*> Pointers;
std::unordered_set<Pointers> pointers;
};
Я хочу сделать указатели хешируемыми, чтобы они соответствовали std::unordered_set<Pointers>
Я читал здесь:
Как специализироваться на std: : hash :: operator () для пользовательского типа в неупорядоченных контейнерах?
Как правильно хешировать настраиваемую структуру?
boost :: hash_combine
Шаблоны и вложенные классы / структуры
И объедините все знания в этот код:
namespace std {
template <typename Dara> struct hash< typename Foo<Data>::Pointers>
{
size_t operator()(const typename Foo<Data>::Pointers & x) const
{
std::size_t seed = 0;
boost::hash_combine(seed, x.first);
boost::hash_combine(seed, x.second);
return seed;
}
};
}
На последнем фрагменте кода компилятор выдает ошибку: ошибка: параметры шаблона не используются в частичной специализации: Data
в точке здесь: typename Data.
Я пытаюсь удалить данные из шаблона и использовать их так: template <> struct hash< typename Foo::Pointers>
, но компилятор говорит мне, что это неправильный тип для шаблона.
Как мне исправить свой код?
С уважением, Таль.
std::hash
как неуспешное. - person Tal   schedule 19.11.2015