奇怪的类模板定义解决方案
奇怪的类模板定义
查看了C++primer,类模板定义的通式为:
可是最近看代码,竟然看到如下的类模板定义,是在搞不懂这是什么语法,也不知道该如何理解。话不多说,直接上代码:
疑问:
1. hash_compare是否为类模板?
2. hash_compare<std::pair<T1, T2> >后面的“<std::pair<T1, T2> >”有何作用?
先谢了。
补充说明:
这个代码是Visual Studio 2005的工程。
------解决思路----------------------
1. 是类模板
2.
请搜索 偏特化 (partial specialization)
另,可参考
http://en.cppreference.com/w/cpp/language/partial_specialization
------解决思路----------------------
要深入理解泛型编程先看《STL源码剖析》
查看了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的工程。
------解决思路----------------------
1. 是类模板
2.
请搜索 偏特化 (partial specialization)
另,可参考
http://en.cppreference.com/w/cpp/language/partial_specialization
------解决思路----------------------
要深入理解泛型编程先看《STL源码剖析》