우선, 내가 원하는 용어는 "게으른로드"또는 "동적 바인딩"이 아닙니다. 나는 정확한 용어를 모르지만 내가 할 때이 질문을 편집 할 것이다.지연로드/동적 바인딩 대 안전
나는 데이터 흐름 A-를 만들 처리 객체를 연결하고있어> B :
방법 1 : 인스턴스화하는 동안 연결 코드 : https://ideone.com/Rsqabi
class Consumer {
public:
virtual void consume(int data) = 0;
};
class A {
public:
A(Consumer& consumer) : consumer_(consumer) {}
void process(int data) { consumer_.consume(data); }
private:
Consumer& consumer_;
};
class B : public Consumer {
public:
B() {}
void consume(int data) { /* consume data */ }
};
나는 소비자 인스턴스를 가지고 있어야 인스턴스화에 편리 A :
int main() {
B* b_ = new B();
A a_ = A(*b_);
a_.process(5);
return 0;
}
2 : 후 연결 인스턴스화 코드 : https://ideone.com/5ij0yZ 내가 진정으로 원하는 것은 인스턴스화 한 후 내 소비자를 선택하는 것입니다
:
class A {
public:
A() {}
void attachConsumer(Consumer* consumer) { consumer_ = consumer; }
void process(int data) {
// must always check consumer_ here!
consumer_->consume(data);
}
private:
Consumer* consumer_;
};
다음 :
int main() {
A a_ = A();
// ... for reasons I won't tell you, B must be created later than A ...
B* b_ = new B();
a_.attachConsumer(b_);
a_.process(5);
return 0;
}
더 나은 모델을?
제가 참조가 유효하다는 것을 항상 알고 있기 때문에 방법 1은 좋습니다. 융통성이 없다는 것은 나쁘다.
방법 2는 소비자가 첨부 할 도로를 선택할 수 있기 때문에 좋습니다 (또는 상태를 안전하게 고려하면 다시 부착). 포인터가 위험하기 때문에 나쁘다.
두 모델 모두의 더하기를 만족하는 방법 3이 있습니까? 내 소비자가 유효하고 연결되어 있는지 항상 확인해야하는 것은 아니지만 동적 연결을 허용합니까?
모델의 차이점에 대한 올바른 용어는 무엇입니까? 나는 그것이 게으른 로딩이나 동적 바인딩이라고 생각하지 않는다. 제발 조언.