假设我们有一个仿函数,它包含几个不同的ref-qualified或简单的const-qualified重载operator ()
。我想要为STL算法使用不同的上下文调用不同的。也就是说,我希望正确地重载operator ()
来调用依赖于constness或" lvalue / rvalue-ness"函子值/引用,我提供给STL算法。比方说,有一个hypotetic算法recurrent_all_of
。我可能希望在STL中找到的表格是:
template< typename Iterator, typename BinaryFunctor >
bool
recurrent_all_of(Iterator begin, Iterator end, BinaryFunctor functor)
{
if (begin == end) {
return false;
}
Iterator previous = begin;
while (++begin != end) {
if (!functor(*previous, *begin)) {
return false;
}
previous = begin;
}
return (++previous != end);
}
但是为了满足对参考性友好的要求,表格应如下:
template< typename Iterator, typename BinaryFunctor >
bool
recurrent_all_of(Iterator begin, Iterator end, BinaryFunctor && functor)
{
if (begin == end) {
return false;
}
Iterator previous = begin;
while (++begin != end) {
if (!std::forward< BinaryFunctor >(functor)(*previous, *begin)) {
return false;
}
previous = begin;
}
return (++previous != end);
}
有任何误解吗?为什么不以这种方式设计STL算法?