我写了一个类,里面有一个重载的转换操作符,如果一个成员变量被读取,我可以做一些事情(例如,计算校验和,从EEPROM中读取存储的值等)。
如果使用简单的数据类型,则可以正常工作。
template <typename T>
class Storage
{
private:
public:
T var;
Storage(const T &value)
: var(value)
{ }
// 'read' variable
operator const T& () const
{
// ... do something
return var;
}
// 'write' variable
const T& operator = (const T &value)
{
var = value;
// ... do something
return var;
}
};
Storage<int> setupValue(34500);
int test1 = setupValue;
如果我使用一个struct
,当阅读整个struct
时,它也可以工作:
typedef struct
{
int min;
int start;
int max;
} setup_t;
Storage<setup_t> setupValues({35100, 39000, 42000});
setup_t test2 = setupValues;
但是,当我只读取该struct
的单个成员变量时,不会调用重载的运算符函数:
int test3 = setupValues.var.start;
有没有一种方法,总是调用重载的操作符函数?
即使我只读取安装结构的一个成员,也应该执行“做些什么”部分。
1条答案
按热度按时间amrnrhlw1#
根据上面的一个建议,我用
get()
函数实现了一个:我现在可以读取setup结构体的单个成员,并在
get()
函数中运行“做些什么”部分,在它前面: