c++ 如何对结构的单个成员使用重载转换运算符?

xe55xuns  于 2023-03-25  发布在  其他
关注(0)|答案(1)|浏览(94)

我写了一个类,里面有一个重载的转换操作符,如果一个成员变量被读取,我可以做一些事情(例如,计算校验和,从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;

有没有一种方法,总是调用重载的操作符函数?
即使我只读取安装结构的一个成员,也应该执行“做些什么”部分。

amrnrhlw

amrnrhlw1#

根据上面的一个建议,我用get()函数实现了一个:

template <typename T>
class Storage
{
private:
   T var; 

public:

  Storage(const T &value)
  : var(value)
  { }

  // 'read' variable
  const T& get(void)
  {
    // ... do something
    
    return var;
  }
};

我现在可以读取setup结构体的单个成员,并在get()函数中运行“做些什么”部分,在它前面:

int test1 = setupValues.get().max;

相关问题