// 典型的“元素必须继承自Mybase*”约束:
template<class T> class Container : Derived_from<T,Mybase> {
// ...
};
事实上,Derived_from并不检查来源(derivation),而仅仅检查转换(conversion),不过这往往是一个更好的约束。为约束想一个好名字是很难的。
既然已经有了优秀的qsort()函数,为什么还需要一个sort()?
对于初学者来说,
qsort(array,asize,sizeof(elem),elem_compare);
看上去太古怪了,而且比这个更难理解:
sort(vec.begin(),vec.end());
对于专家来说,在元素与比较方式(comparison criteria)都相同的情况下,sort()比qsort()更快,这是很重要的。而且,qsort()是通用的,所以它可以用于不同容器类型、元素类型、比较方式的任意有意义的组合。举例来说:
struct Record {
string name;
// ...
};
struct name_compare { // 使用"name"作为键比较Record
bool operator()(const Record& a, const Record& b) const
{ return a.name<b.name; }
};
void f(vector<Record>& vs)
{
sort(vs.begin(), vs.end(), name_compare());
// ...
}
而且,很多人欣赏sort()是因为它是类型安全的,使用它不需要进行造型(cast),没有人必须去为基本类型写一个compare()函数。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/