奇怪的类模板定义

C++语言 码拜 9年前 (2015-11-15) 1094次浏览
查看了C++primer,类模板定义的通式为:

template <class T1, class T2,..., class Tn>
class TestClass{
//....
};

可是最近看代码,竟然看到如下的类模板定义,是在搞不懂这是什么语法,也不知道该怎么样理解。话不多说,直接上代码:

namespace _HASH_NAMESPACE {
    template<class T> struct hash
    {
        size_t operator()(const T &p) { return hash_compare<T>()(p); }
    };
    template<class T1, class T2> struct hash_compare<std::pair<T1, T2> >
    {
        static const size_t bucket_size = 4;
        static const size_t min_buckets = 8;
        size_t operator()(const std::pair<T1, T2> &p) const { return hash_compare<T1>()(p.first) + 37 * hash_compare<T2>()(p.second); }
        bool operator()(const std::pair<T1, T2> &p1, const std::pair<T1, T2> &p2) const { return p1 < p2; }
    };
    
    template<class T> struct hash_compare<T *>
    {
        static const size_t bucket_size = 4;
        static const size_t min_buckets = 8;
        size_t operator()(T *p) const { return (size_t)p; }
        bool operator()(T *p1, T *p2) const { return p1 < p2; }
    };
}

疑问:
1. hash_compare能否为类模板
2. hash_compare<std::pair<T1, T2> >后面的“<std::pair<T1, T2> >”有何作用?
先谢了。
补充说明:
这个代码是Visual Studio 2005的工程。

解决方案:35分
1. 是类模板
2. 
请搜索 偏特化 (partial specialization)
另,可参考
http://en.cppreference.com/w/cpp/language/partial_specialization
解决方案:5分
要深入理解泛型编程先看《STL源码剖析》

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明奇怪的类模板定义
喜欢 (0)
[1034331897@qq.com]
分享 (0)