Tôi đang viết một lớp có unordered_set thuộc loại riêng của nó làm thành viên. Vì vậy, tôi cần viết chuyên môn cho hash<Foo>
. Chuyên môn này cần phải được xác định sau khi Foo được khai báo. Nhưng có vẻ như tôi đã cần chuyên môn hóa cho hash<Foo>
trước khi xác định thành viên unordered_set<Foo>
. Ít nhất nó không biên dịch và thất bại ở đó. Tôi đã thử một tuyên bố về phía trước của mẫu băm nhưng không thể làm cho nó làm việc do đó hoặc.std :: unordered_set <Foo> là thành viên của lớp Foo
Đoạn mã có liên quan là:
class Foo {
public:
int i;
std::unordered_set<Foo> dummy;
Peer(std::unordered_set<Foo>);
};
namespace std {
template<> struct hash<Foo>
{
size_t operator()(const Foo& f) const
{
return hash<int>()(f.i);
}
};
}
Cảm ơn trước
Cảm ơn câu trả lời nhanh, sau đó tôi sẽ thử nó một cách khác nhau – devmapal
Vì một số lý do, Clang sẽ cho phép hành vi này. GCC xác định chính xác một vấn đề. – vmrob