重载 std::vector::at 赋值运算符



我有一个类,它允许我访问向量值:

Class Image{
public:
Image(int rows, int cols): cols_(cols), rows_(rows), data_(rows*cols,0) {};
int& at(int row, int col){
return data_.at(col*row);
};
private:
int rows_ = 0;
int cols_ = 0;
const int max_val_ = 255;
std::vector<int> data_;

目前这让我执行

int num = image.at(row, col);
// or
image.at(row, col) = 10;

我的问题是如何限制data_的值以不允许分配超过max_value_?即image.at(row,col) = 256;

就像Max Langhof说的,你可以使用这样的代理对象:

class AssignmentProxy
{
public:
AssignmentProxy(int& value, int min, int max) : value_(value), min_(min), max_(max) { }
AssignmentProxy& operator=(int value)
{
if (value >= min_ && value < max_)
value_ = value;
else 
throw std::invalid_argument("no");
return *this;
}
operator int() const noexcept
{
return value_;
}
private:
int min_, max_;
int& value_;
};

隐式转换为int是有问题的,但我认为是合理的,因为这只是一个模仿整数的代理。

这是一个完整的示例。

最新更新