【发布时间】:2016-08-01 20:29:04
【问题描述】:
我正在研究一个重载索引运算符 ([]) 的类。为了允许对元素进行赋值,运算符必须返回对元素的引用。例如:
class myclass: public vector<int>
{
...
public:
int & myclass::operator [] (int i)
{
return vector<int>::operator[](i);
}
...
在这种情况下,客户端代码可以使用返回的引用为元素赋值。但是,我想有一种方法来拦截元素的实际分配,这样我就可以使用分配的值来做一些内部管理。有没有一种相对干净和简单的方法来做到这一点,或者我应该只创建一些访问器函数而不是使用运算符重载?
【问题讨论】:
-
有人会问你为什么要从
std::vector继承。 -
不要从不提供虚拟析构函数的类继承。至少,只要你真的知道自己在做什么!
-
我使用 std::vector 来简化示例。我的实际课程使用地图。我要实现的是双向映射。我需要一种有效的方法来仅使用值作为查找来获取密钥,而无需使用线性搜索。我计划使用另一个向量/映射来维护反向映射,但我无法捕获分配的值。在这一点上,似乎只使用 getter/setter 比定义一个新类来捕获分配更好。将值包装在类中的另一个问题是它会捕获值而不是索引。
标签: c++ vector operator-overloading