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