我有一个类,它允许我访问向量值:
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
是有问题的,但我认为是合理的,因为这只是一个模仿整数的代理。
这是一个完整的示例。