爲了得到一個「易於記憶」的界面 索引生成函數std :: distance(a,b),我想出了 與它的一個更好的區分想法的論據 (針對向量的基本使用時:vec.begin())通過調用模板函數與向量 及其迭代器,像 :std :: vector和它的迭代器作爲單個模板類型名稱
std::vector<MyType> vect;
std::vector<MyType>::const_iterator iter;
...
...
size_t id = vectorindex_of(iter, vect);
與理論上永遠不會混淆 參數的順序;-)
上述想法的明確表述將 閱讀某事物。像
template <typename T>
inline
size_t vectorindex_of(
typename std::vector<T>::const_iterator iter,
const std::vector<T>& vect) {
return std::distance(vect.begin(), iter);
}
...它工作但看起來很尷尬。
我很想有模板機制隱含推斷類型 像(僞代碼):
template <typename T>
inline
size_t vectorindex_of(T::const_iterator iter, const T& vect) {
return std::distance(vect.begin(), iter);
}
...這是行不通的。但爲什麼?
感謝您指出這個簡單的修復。我想將您的答案都標記爲「已接受的答案」,但只有一個可能;-) – 2009-09-30 10:45:27