プロジェクトの後半で各オブザーバーに新しい機能を追加する必要があるというキャッチを使用して、オブザーバーパターンを実装しようとしています。
class Obsevers {
public:
virtual ~Obsevers() {}
};
class TestObserver : public Obsevers {
public:
void print1(int i) {
std::cout << i << std::endl;
}
};
class TestObserver2 : public Obsevers {
public:
void print2(int i, char c) {
std::cout << i << " , " << c << std::endl;
}
//possible new functions here later
};
私の通知方法は次のとおりです。
template<typename Type, typename Notify>
void NotifyObserver(Notify notify) {
typedef std::list<Obsevers*>::iterator iter;
iter it = m_observers.begin();
iter end = m_observers.end();
for(; it != end; ++it) {
Type * o = dynamic_cast<Type*>(*it);
if(o == NULL) continue;
notify(o);
}
}
コードを通知するための呼び出しを行うには、次のようになります。
NotifyObserver<TestObserver2>(boost::bind(&TestObserver2::print2, _1, 32, 'b'));
上記のコードブロックのコンテキストを考えると、私の質問は、バインドのオブジェクトパラメータにプレースホルダー(_1)を使用していますか、それともこの未定義の動作ですか?
バインドに関するブーストドキュメントでは、関数パラメーターに対してのみオブジェクトのプレースホルダーを使用するように指定されていませんでした。