Làm cách nào để cho phép triển khai STL nhận các loại tùy chỉnh của tôi? Trên MSVC, có một lớp học std::tr1::hash
, mà tôi có thể chuyên về một phần bằng cách sử dụngLàm cách nào để mở rộng std :: tr1 :: hash cho các loại tùy chỉnh?
namespace std
{
namespace tr1
{
template <>
struct hash<MyType>
{ ... };
}
}
nhưng đây có phải là cách được khuyến nghị không? Hơn nữa, điều này có làm việc với việc thực hiện GCC không? Đối với boost::hash
, đủ để cung cấp chức năng miễn phí size_t hash_value (const MyType&)
, có điều gì tương tự cho việc triển khai TR1 không?
Có cách nào để mở rộng std :: hash cho các loại do người dùng xác định với các nhà xây dựng bản sao riêng không? Ngoài ra, là có một cách để mở rộng nó với một nhà điều hành() mà mất một const ref thay vì val? –
Sự cố với chuyên môn mẫu là gì? Bạn không lấy một bản sao của đối tượng của bạn (bạn vượt qua nó bằng tài liệu tham khảo), do đó, không có vấn đề - và các nhà điều hành() mất một const ref hoặc giá trị, bất cứ điều gì bạn muốn. Nhìn vào câu trả lời của Phil Nash, lấy đối tượng là const ref. – Anteru