4

我最近了解到,std::reference_wrapper<T>函数调用运算符有一个重载,以防T类似函数。我想知道标准委员会是否有理由在我们捕获类似std::vector. 在我看来,这个标准类中只有一个只能作为类成员重载的典型运算符中的一个。

这背后的原因是什么?

4

1 回答 1

0

通常,引用包装器不能支持底层类型的每个操作。例如,无法自动支持成员函数。下标运算符只是一个普通的操作,所以没有充分的理由支持它。当然,我们可以得到一个operator[]调用底层的operator[],但是为什么不支持operator+呢? operator==? begin和怎么样end?:)

但是,重载函数调用运算符有一个重要的后果:类变成了仿函数类型。这在许多情况下都很有用。例如:

std::for_each(first, last, std::ref(stateful_functor));

这是重载的一个很好的理由operator()

于 2019-10-25T09:48:46.177 回答