[英]defining hash function for nested custom type
給定一個嵌套的模板類結構,如下所示:
template<class T> class A
{
...
public:
...
class B;
};
我希望std :: hash函數在嵌套類上起作用,以便可以將其放入諸如unsorted_map和unsorted_set之類的東西中,因此我將嵌套類定義為:
template<class T> class A<T>::B
{
public:
bool operator==(const A<T>::B &) const;
...
friend struct std::hash<A<T>::B>;
};
然后嘗試為這種類型添加專門的std :: hash結構,如下所示:
namespace std
{
template<class T> struct hash<A<T>::B>
{
bool operator()(const A<T>::B &x) const
{
...
}
};
}
但是,當我嘗試定義自定義std :: hash函數對象時,編譯器會強烈抱怨。
我收到的錯誤消息沒有幫助,如下所示:
xyz.cc:17:38: error: type/value mismatch at argument 1 in template parameter list for 'template<class _Tp> struct std::hash'
template<class T> struct hash<A<T>::B>
^
xyz.cc:17:38: error: expected a type, got 'A<T>::B'
但是,我不確定該如何表達。
為什么這是錯誤的,我必須怎么做才能解決?
你不能。
從屬類型無法進行模式匹配,因為一般情況下需要反轉任意圖靈完備算法。
最簡單的方法是使B
為獨立模板,然后在A
鍵入def。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.