扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
集合类尤其经常使用多个占位符。查找表所包含的值(数值、Employee 实例或日期、char* 字符串)由类型为整数、char* 字符串或日期的键索引。Pair 模板是使用两个占位符的简单类:
template <class A, class B> class Pair { private: A index; B value; public: Pair(A aa, B bb):index(aa),value(bb) {} void display(){cout << index << ' ' << value << endl;} bool operator>(const Pair<A,B>& p) { return index>p.index;} };
Pair 并未作许多工作,但您可以想象相似的代码在灵活的集合解决方案的核心出现。它拥有索引和值的附件,显示它们,并且可以通过仅比较它们的值来比较两个 Pair 实例。当索引类型 A 是整数或其他数值类型,或者是已经执行了运算符的类时,它可以完全正确的运行。>.当索引类型是 char* 时,比较就没有意义了,因为 > 比较字符指针的数值地址,而不是它指向的字符。另外,索引的初始化不会产生字符的副本,只会产生指针的副本。
局部模板专用化是这样一种专用化:用特定类型代替一个占位符(本例中为 char*),而另一个则不需要。对于 Pair,char* 索引值的局部专用化如下所示:
template <class B> class Pair<char*, B> { private: char* index; B value; public: Pair(char* aa, B bb):value(bb) {index = new char[strlen(aa)]; strcpy(index,aa);} void display() {cout << index << ' ' << value << endl;} bool operator>(const Pair<char*, B>& p) { return ( strcmp(index,p.index) > 0);} };
上述代码在以前的 Visual C++ 版本下不能编译。然而,从 Visual C++ .NET 2003 版本以后,它就可以编译了。
查看本文来源如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者