0
나는 프로젝트에서 나중에 각 관찰자에게 새로운 기능을 추가해야하는 catch와 함께 관찰자 패턴을 구현하려고합니다.부스트 :: 개체 자리 표시 자와 바인딩
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);
}
}
다음과 같이 코드가 통지 전화를 걸려면 다음과 같이 방법을 알려 내
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
};
이다.
NotifyObserver<TestObserver2>(boost::bind(&TestObserver2::print2, _1, 32, 'b'));
지금 올바른 바인딩에 내 질문에 개체 매개 변수에 대한 자리 표시 자 (_1)을 사용하는 위의 코드 블록으로 컨텍스트를 제공하거나 정의되지 않은 동작은?
바인드에 대한 향상된 설명서에서는 함수 매개 변수에 대해서만 개체에 대해 자리 표시자를 사용하도록 지정하지 않았습니다.
내가보기에 나는 boost :: mem_fn에 대해 잘 모른다. 그래서 나는 그것이 어떻게 작동하는지 읽을 것이다. 감사. – andre
더 자세히 읽고 나면 이해합니다. 감사. – andre