我目前正在查看SGI STL的源代码,特别是距离算法。
正如我所看到的,为了最大限度地提高效率,SGI 使用了很多内联模板来最大限度地减少运行时间。但我真的不明白一件事。
对于算法距离,SGI定义了一个模板:
template <class Iterator>
inline typename iterator_traits<Iterator>::iterator_category
iterator_category(const Iterator&){
typedef typename iterator_traits<Iterator>::iterator_category category;
return category();
}
然后,它定义了算法距离的公共接口,如
template <class Iterator>
inline iterator_traits<Iterator>::iterator_category
distance(InputIterator first, InputIterator last)
{
typedef typename iterator_traits<InputIterator>::iterator_category category;
return __distance(first, last, category());
}
在你对我的知识做出所有判断之前,我想说我认为理解 STL 的设计模式并且我理解每一行的含义,我的意思是语法。
但据我所知,我只是不知道为什么 SGI 没有像这样实现算法距离
template <class Iterator>
inline iterator_traits<Iterator>::iterator_category
distance(InputIterator first, InputIterator last)
{
return __distance(first, last, iterator_category<InputIterator>(first));
}
据我所知,函数调用会消耗一定的时间,但这里的 iterator_category 是内联函数,与大多数主流编译器中的宏具有相同的效果。
使用 iterator_category() 的唯一不足可能是编译器由于 pass-by-const-reference 而生成的临时对象。
我对吗?或者有什么我还不认识的天才设计模式,有空告诉我!