我最近了解到,std::reference_wrapper<T>
函数调用运算符有一个重载,以防T
类似函数。我想知道标准委员会是否有理由在我们捕获类似std::vector
. 在我看来,这个标准类中只有一个只能作为类成员重载的典型运算符中的一个。
这背后的原因是什么?
我最近了解到,std::reference_wrapper<T>
函数调用运算符有一个重载,以防T
类似函数。我想知道标准委员会是否有理由在我们捕获类似std::vector
. 在我看来,这个标准类中只有一个只能作为类成员重载的典型运算符中的一个。
这背后的原因是什么?
通常,引用包装器不能支持底层类型的每个操作。例如,无法自动支持成员函数。下标运算符只是一个普通的操作,所以没有充分的理由支持它。当然,我们可以得到一个operator[]
调用底层的operator[]
,但是为什么不支持operator+
呢? operator==
? begin
和怎么样end
?:)
但是,重载函数调用运算符有一个重要的后果:类变成了仿函数类型。这在许多情况下都很有用。例如:
std::for_each(first, last, std::ref(stateful_functor));
这是重载的一个很好的理由operator()
。