查看了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
2.
请搜索 偏特化 (partial specialization)
另,可参考
http://en.cppreference.com/w/cpp/language/partial_specialization
解决方案:5分
要深入理解泛型编程先看《STL源码剖析》