我正在尝试使用 CRTP 和协方差来实现转发:
class Display { // interface
virtual Display& drawCircle(...) = 0;
virtual Display& drawRect(...) = 0;
// etc. lots of these.
};
class ADisplay<R> : public Display {
virtual Display& getWrapped();
virtual R& drawCircle(...) { getWrapped().drawCircle(...); return *this; }
virtual R& drawRect(...) { getWrapped().drawRect(...); return *this; }
// etc?
};
class B : public ADisplay<B> {
Display& wrapped;
virtual Display& getWrapped() { return wrapped; }
B& methodSpecificToB() {...}
};
这将用于“builder”风格:
B b;
b.drawCircle(1,2,3)
.drawRect(4,5,6)
.methodSpecificToB();
这也许并不奇怪,因为 ADisplay<B>在实例化时没有完全定义。
你能想出其他方法来做到这一点吗?