簡體   English   中英

為嵌套的自定義類型定義哈希函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM