我正在编写一个partition
函数,它是Bidirectional
和Forward
迭代器的特化。
而且我不确定顺序是否会影响结果,即这两个版本是否不同。
第一
template< class BIter, class UnaryPredicate>
BIter __partition( BIter first,
BIter last,
UnaryPredicate pred,
std::bidirectional_iterator_tag);
template<typename FIter, typename UnaryPredicate>
FIter __partition(FIter first,
FIter last,
UnaryPredicate pred,
std::forward_iterator_tag);
template<typename FIter, typename UnaryPredicate>
FIter newton::partition(FIter first,
FIter last,
UnaryPredicate pred)
{
return newton::__partition(first, last, pred, std::__iterator_category(first));
}
第二名
template<typename FIter, typename UnaryPredicate> FIter
__partition(FIter first,
FIter last,
UnaryPredicate pred,
std::forward_iterator_tag);
template< class BIter, class UnaryPredicate>
BIter __partition(BIter first,
BIter last,
UnaryPredicate pred,
std::bidirectional_iterator_tag);
template<typename FIter, typename UnaryPredicate>
FIter newton::partition(FIter first,
FIter last,
UnaryPredicate pred)
{
return newton::__partition(first, last, pred, std::__iterator_category(first));
}
我看到gcc,llmv等使用第二个版本,但是...我读到编译器使用了原型适合的第一个函数。
并且
Bidirectional Iter
是否适合Forward Iter
然后使用该功能而不是专用功能不是这种情况吗? 最佳答案
不,顺序无关紧要。
如果category参数恰好是std::bidirectional_iterator_tag
,则一个函数比需要转换为基类的函数更好。