gpt4 book ai didi

c++ - 仅在声明定义时检查 vector/数组边界

转载 作者:行者123 更新时间:2023-11-30 05:42:05 25 4
gpt4 key购买 nike

我已经创建了我自己的容器,它是从 vector 继承的。我想重新实现 operator[]以一种检查由 #define 决定的边界的方式。

所以举个例子,忽略模板参数,因为它们很复杂而且不相关

class MyArray : vector<double>
{
//...
virtual double& operator[](const size_type& index);
virtual const double& operator[](const size_type& index) const;
//...
}


double& MyArray::operator[](const size_type& index)
{
#ifdef DEBUG_ENABLED
return this->at(index);
#else
return (*this)[index];
#endif
}

但是,这不起作用,因为自 operator[]重载,调用operator[]#else会变成递归的。

我想根据我的#define 检查边界,而不是根据我是否使用 std::vector<>::at()std::vector<>::operator[] .

我该如何解决?

编辑:因为它提供了很多使用 std::vector 作为成员而不是继承的方法,我不得不提到这样做对我来说不是一个好的解决方案,因为我将不得不重新实现的所有成员函数标准:: vector 。这样做可不是一件愉快的事!

最佳答案

只需按需调用基类成员函数即可:

double& operator[](size_type index)
{
#ifdef DEBUG_ENABLED
return std::vector<double>::at(index);
#else
return std::vector<double>::operator[](index);
#endif
}

你也应该提供一个 const 版本。另请注意,您可能不想让此运算符成为 virtual

关于c++ - 仅在声明定义时检查 vector/数组边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30819479/

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