C++ で Decorator パターンを使用し、装飾されたオブジェクトの署名/ID に依存できるようにしたいと考えています。C++でそれを行うことは可能ですか?
つまり、コンポーネントを装飾したいと思います。
class Component {
public:
Component();
virtual void doSomething();
}
デコレータで:
class Decorator : public Component {
public:
Decorator(Component*);
virtual void doSomething();
private:
Component* _component;
}
私がするとき:
Component foo;
Decorator(&foo) bar;
std::cout << typeid(bar).name() << std::endl;
「Decorator」の代わりに「Component」を出力します。
(これは実際には、decorator モジュールを使用して Python で行うのは非常に簡単ですが、私は現在 C++ を学んでおり、この質問に対する答えをどこから探し始めればよいかさえわかりません。)
これは、Component クラスを拡張したいが、透過的な方法で (拡張されていないかのように) 使用できる場合に便利です。
class ExtendDecorator : public Decorator {
public:
ExtendDecorator(Component*);
virtual void doSomething();
private:
void doSomethingMore();
}
void ExtendDecorator::doSomething() {
Decorator::doSomething();
doSomethingMore();
}