// 典型的“元素必須繼承自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()函數。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/