【发布时间】:2020-05-19 18:56:54
【问题描述】:
我有有状态的类,一旦创建了一个类实例,它的 Bar 函数/方法只能调用一次,否则内部状态会混乱。这种东西怎么设计?
在编译时可以发出警告/错误会更好。
class Foo {
bool Bar(string arg...) { do something...}
// some class member
string s;
int i;
}
【问题讨论】:
-
类
bool bar_called_ = false;和bool Bar () { if (bar_called_) return false; // or throw exception中的私有变量,后跟bar_called = true; -
谢谢戴夫,我刚刚编辑了这个问题:在编译时最好有一些东西。我在代码中看到了几件事: 1. cmets 说它应该使用一次。 2. 调用 Bar() 时重置状态。
-
我的猜测是编译时的任何事情都可能只是将上述内容隐藏在宏或类或类似物中,或者会使 Bar 成为构造函数的一部分,但也许其他人会提供建议。
-
我担心您无法在编译时实现该行为,至少如果您希望能够从项目的任意部分调用 Bar 则不会。
-
这种技术通常称为“类型状态编程”,并且(据我所知)只能在具有线性类型系统的语言中完成(即,您可以从中删除“用完”的变量范围)。这是example in Rust 和an approximation in C++
标签: c++ class oop design-patterns