为了得到一个“易于记忆”的界面 索引生成函数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