C++ 类/结构中的函数依赖属性

Fra*_*Vel 1 c++ attributes struct class functional-dependencies

我想创建一个类/结构,其中一个属性在功能上依赖于其他属性。如何做到这一点?

struct Numbers {
  int a;
  int b;
  int c; // c == a+b
}


Numbers n1 {1, 2, 3}; // Ok.
Numbers n2 {1, 2, 4}; // Error! 
Run Code Online (Sandbox Code Playgroud)

在我的用例a, b, c中,如果这很重要(因此const int可以使用),则是恒定的。

所有属性都会在 class/struct 方法中多次出现,因此目标是缓存 value a+b。以加法为例,依赖函数可能更复杂。

cdh*_*wie 5

如果ab是可变的,那么你不能强制c保持同步;所有三个都必须是 const 才能强制执行此不变量。

最简单的方法是创建c一个函数:

struct Numbers {
  int a;
  int b;
  int c() const { return a + b; }
}
Run Code Online (Sandbox Code Playgroud)

如果您希望在c需要时缓存而不是计算的值,那么您还需要隐藏ab隐藏访问器,以便您可以在更新c时进行更新。

class Numbers {
public:
  Numbers(int a, int b) : ma{a}, mb{b} { updateC(); }

  int a() const { return ma; }
  int b() const { return mb; }
  int c() const { return mc; }

  void a(int v) { ma = v; updateC(); }
  void b(int v) { mb = v; updateC(); }
  // No setter for c

private:
  void updateC() { mc = ma + mb; }

  int ma;
  int mb;
  int mc;
};
Run Code Online (Sandbox Code Playgroud)