- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
i = i;} -6ren">
我正在寻找的是不流利的类(class):
class NonFluent {
int i=0;
public:
void setValue(int i) {this->i = i;}
void multiplyValue(int i) {this->i *= i;}
int getValue() {return this->i;}
};
我想更改 void
方法以实际返回对 *this
的引用。我知道仅仅派生是不可能的,因为我们不能只改变返回类型,因为 C++ 无法区分函数调用。
我们可以使用组合:
class Fluent {
Fluent& setValue(int i) {var.setValue(i); return *this;}
Fluent& multiplyValue(int i) {var.multiplyValue(i); return *this;}
int getValue() {return var.getValue();}
private:
NonFluent var;
};
但如果有许多 void
方法开始,那就很痛苦了。我们还可以使用对象编辑器,我问了以下问题: Is Object Editor a good approach if there are multiple member functions to call? , 但它有很多缺点。
你知道有什么好的方法吗? (不直接改变非流利类?)
最佳答案
一种可以与 Fluent
一起使用但不能与 NonFluent
一起使用的更好方法是使您的类不可变,并拥有它的方法返回带有修改结果的新对象:
class Fluent {
static Fluent withValue(int i) {
NonFluent v;
v.setValue(i);
return Fluent(v);
}
Fluent multiplyValue(int i) const {
Fluent res(var);
res.var.multiplyValue(i);
return res;
}
int getValue() const {return var.getValue;}
private:
Fluent(const NonFluent& v) : var(v) {}
NonFluent var;
};
注意创建 Fluent
对象的静态工厂方法。
使用工厂的代码如下所示:
int res = Fluent
.withValue(5)
.multiplyValue(2)
.getValue();
这让您有机会重新设计 API 以包含采用其他流畅对象的方法,如下所示:
Fluent multiply(const Fluent& other) const {
Fluent res(var);
res.var.multiplyValue(other.getValue());
return res;
}
总体结果是您的 API 变得对并发友好,而无需更改原始 NonFluent
API 中的任何内容。
关于c++ - 有什么好的方法可以将 "reimplement"非流畅界面转换为流畅界面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42175437/
我正在寻找的是不流利的类(class): class NonFluent { int i=0; public: void setValue(int i) {this->i = i;}
XCode 给了我一个非常无用的错误,关于不允许重新实现一个类。我搜索了又搜索,没有其他地方实现了该类名——被引用了,但没有实现。 我实际上进行了关键字搜索,遍历了我项目中引用该类的每一行,但没有找到
假设我需要重新定义 Add在我的 Dictionary . 解决方案 A: public class ImplementedDict : IDictionary { private reado
我是一名优秀的程序员,十分优秀!