オブザーバー パターンは、イベント駆動型システムで非常に役立ちます。2 つの言語で実装する方法を次に示します。
ジャワ
AOP ライブラリまたはバイトコード エンジニアリング (BCEL、cglib、asm など) を使用して、その場でサブクラスを作成します。監視対象プロパティのゲッターまたはセッターへの呼び出しは、アタッチされたオブザーバーに通知します。
Objective-C
これは Java に似ています - isa swizzling を使用してその場でサブクラスを作成します。監視対象のプロパティを呼び出すと、アタッチされたオブザーバーに通知されます。興味深いことに、Objective-C では、すべてのオブザーバーが削除された場合、ラップされたプロパティ メソッドなしで元のクラスに戻ることができます。一方、Java では通常、クラスは 1 回読み込まれるため、(おそらく空の) 一連のオブザーバーに常に通知します。
C++はどうですか?
C++ ではリフレクションが制限されているため、上記のアプローチを使用することは困難です。C ++での「最良の」(つまり、典型的または事実上の標準を意味する)アプローチは何ですか? 上記で参照した Java および Objective-C の実装のような定型コードを回避する方法はありますか? おそらくC++のメタプログラミング機能を使用していますか?