メソッドテンプレートを持つクラスがあります:
struct Subject
{
template <typename T>
void doSomething()
{
..
}
};
doSomething
が( any で)呼び出されるたびT
に、「オブザーバー」に通知したいと思います:
template <typename T>
void onDoSomething()
{
..
}
オブザーバーがメソッド テンプレートであることが重要です (メソッドが含まれるクラス テンプレートも同様に機能します)。そうでない場合は、一般的なオブザーバー パターンを実装するだけで済みます。
Subject::doSomething()
メソッドを呼び出すように変更しても問題ありません。ただし、クラスSubject
は具体的な Observer/observer メソッドを「認識」してはなりません。
この背後にある考え方は次のとおりです。私Subject
は 2 つのプロジェクトで使用しています。オブザーバーはそのうちの1つだけに必要です(そして持っています)。
これを達成する方法はありますか?