C++ 类/结构中的函数依赖属性
Functional dependent attribute in c++ class/struct
我想创建一个类/结构,其中一个属性在功能上依赖于其他属性。如何实现这一点?
struct Numbers {
int a;
int b;
int c; // c == a+b
}
Numbers n1 {1, 2, 3}; // Ok.
Numbers n2 {1, 2, 4}; // Error!
在我的用例中,a, b, c
是恒定的,如果这很重要(所以可以使用const int
(。
所有属性都会在类/结构方法中多次出现,因此目标是缓存值a+b
。以加法为例,依赖函数可能更复杂。
如果a
和b
是可变的,那么你就不能强制c
保持同步;这三个都必须是常量,你才能强制执行这个不变性。
最简单的方法是将c
变成一个函数:
struct Numbers {
int a;
int b;
int c() const { return a + b; }
}
如果您希望在需要时缓存而不是计算c
的值,则需要隐藏a
和b
在访问器后面,以便在更新时可以更新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;
};
你可以做这样的事情:
struct Numbers {
Numbers(int a, int b) : a(a), b(b), c(a + b) {}
private:
int a;
int b;
int c; // c == a+b
};
编辑:
为了保持a
和b
的值更新,并获取这些变量的值,你必须使用get和set方法,就像在@cdhowie响应中一样。
相关文章:
- 从不同的附加依赖项中识别等同命名的函数
- 主函数参数的属性
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- C++调用具有 *this 属性的单个帮助程序函数
- 使用 CTRP 时,是否访问访问父构造函数 UB 中的子属性?
- c++ 构造函数 将 1 个字符串参数转换为 3 个属性
- 如何在不知道属性具有哪些构造函数的情况下初始化属性?
- C++ 类/结构中的函数依赖属性
- 在使用 std::sort() 和 lambda 函数按属性对 ADT 的向量进行排序时遇到问题
- 如何在不更改代码的情况下为所有C++函数设置属性
- C++函数依赖关系图
- 如何在依赖属性更改时重新计算绑定到 qml 属性的 c++ 函数
- 对所有成员函数和属性使用 "this" 是否是一种不良做法?
- C++:成员类之间的构造函数依赖关系
- 构造函数依赖注入:unique_ptr + move vs shared_ptr
- 如何向lambda函数添加属性
- 接受std::函数的模板函数,该函数依赖于模板形参
- 实现函数的c++属性
- 函数的属性是什么意思
- 当函数依赖于两个不同的类时,避免进行类型检查