reference_wrapper的下标运算符

问题描述 投票:4回答:1

我最近了解到,如果std::reference_wrapper<T>与函数相似,则T对于函数调用操作符有重载。我想知道在我们捕获类似std::vector的情况下,标准委托人是否给出了不包括数组下标运算符的原因。在我看来,这两个标准运算符中只有一个能作为类成员才能重载,这两个典型运算符中只有一个存在。

这背后的原理是什么?

c++ std
1个回答
0
投票

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

但是,重载函数调用运算符有一个重要的后果:该类成为函子类型。在许多情况下这可能很有用。例如:

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

这是重载operator()的充分理由。

© www.soinside.com 2019 - 2024. All rights reserved.