gpt4 book ai didi

c++ - STL 重载 vector 赋值

转载 作者:行者123 更新时间:2023-11-28 02:02:50 30 4
gpt4 key购买 nike

我正在开发一个重载索引运算符 ([]) 的类。为了允许对元素进行赋值,运算符有必要返回对该元素的引用。例如:

class myclass: public vector<int>
{
...
public:
int & myclass::operator [] (int i)
{
return vector<int>::operator[](i);
}
...

在这种情况下,客户端代码可以使用返回的引用来为元素赋值。但是,我希望有一种方法可以拦截元素的实际赋值,这样我就可以使用赋值来进行一些内部管理。有没有一种相对干净和简单的方法来做到这一点,或者我应该只创建一些访问函数而不是使用运算符重载?

最佳答案

据我所知,std::vector 索引运算符已经返回对项目的引用(const 或非常量),因此无需继承和覆盖。

如果你想拦截值的赋值,正确的做法是定义/覆盖值本身的赋值运算符(你不能在 vector 索引运算符中这样做)。这当然不适用于纯 int,因此您需要将 int 包装在一个类中,该类将提供赋值运算符,您可以在那里做“任何你想做的事”。

编辑:

好的,我明白了,那么可能需要做一些覆盖。对于反向查找,一种可能性是不将值存储在反向结构中,而是指向它(指向原始位置)的指针。原始结构中的值分配将通过指针重定向反射(reflect)出来。这还需要将自定义比较运算符传递给反向查找映射,以便不比较指针,而是比较值。

一般来说,可能还值得检查 boost::multi_index ,它允许做到这一点 - 创建一个具有多个查找索引的结构。

关于c++ - STL 重载 vector 赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38707559/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com