函数定义不会在模板中声明参数错误

时间:2012-04-10 09:23:17

标签: c++ template-specialization

之前已经提出过这个问题,但不是在相同的背景下。

代码:

    namespace std
    {
    template <typename T, typename U>
    struct hash < pair <T,U> >
    {
        size_t operator()
        {
            return hash<T>()(first) ^ hash<U>()(second);
        }
    };
    }

我正在尝试使用unordered_map,因为元素不需要排序。但这需要哈希比较功能。以下代码生成编译时错误:

“错误:函数定义未声明参数”

问题是我的地图不仅包含内置类型,而是混合:

typedef std::vector<Point> Point_Set;
typedef std::unordered_map < Point_Set, double > Tree;

有关于此的任何想法吗?

2 个答案:

答案 0 :(得分:2)

运营商需要将一对作为参数,并使用其中的firstsecond成员:

size_t operator()(pair<T,U> const & pair)
{
    return hash<T>()(pair.first) ^ hash<U>()(pair.second);
}

答案 1 :(得分:0)

这里有一些看起来不像C ++的东西。

  • 你的hash struct有两个模板参数,但你用一个参数调用它。
  • operator()不接受任何参数,但是你给它一个。
  • 首先未在任何地方声明,但您将其用作operator()的参数。