Я предполагаю, что специализация std :: hash для общих типов указателей может использоваться для указателей между собой, однако я не могу использовать ее как таковую; вместо этого мой компилятор дает мне ошибку «неполного типа», которую я предполагаю, означает, что «не использует специализацию std :: hash для указателей? Что тут происходит?Невозможно использовать специализацию std :: hash для Pointer-to-Member?
#include <functional>
struct foo{
void bar(int a){}
};
int main(){
std::hash<void (foo::*)(int)> hasher;
}
Ошибка:
..\src\m.cpp:43:32: error: aggregate 'std::hash<void (foo::*)(int)> hasher' has incomplete type and cannot be defined
То, что «реализует класс», замаскирует сложную часть проблемы - далеко не ясно, как вычислить значение хэша для указателя на член. –
@GeoffRomer, я согласен. Я не уверен, что OP знает, как реализовать класс. Я помогал объяснить ошибку компилятора и как его преодолеть. –
@R Sahu, насколько я знаю, нет четкого способа взять хэш от указателя к члену. Я был просто (неправильно), полагая, что указатель на специализацию std :: hash покрыл их. – Shokwav