C++에서 주기적 종속성 문제를 다루고 있습니다. 다음과 같이클래스 템플릿을 사용하는 C++ 순환 종속성 - 리팩토링하는 방법?
상황은 같습니다 LIBA가 libB에서 변환기 클래스를 사용하고 libB 변환 할 필요가 LIBA의 객체 유형에 대해 지금이 필요하기 때문에
libA.so:
- Body.cpp
- Header.cpp
- DataObject.cpp
- DataObject::read(boost::asio::streambuf* data)
{
boost::asio::streambuf data;
....
body = (new DataConverter<Body>)->convert(&data);
header = (new DataConverter<Header>)->convert(&data);
}
libB.so:
- DataConverter.cpp
-> DataConverter<T>
-> T* DataConverter<T>::convert(boost::asio::streambuf* data)
libA.so <-> libB.so
는 순환 종속성이 있습니다 - DataConverter :: convert는 Body 또는 Header 객체를 반환하기 때문에
전방 선언을 사용하여이 문제를 해결할 생각이었습니다. 그러나 저에게는 가장 깨끗한 해결책이 아닙니다. 모두 내 계획은 확장 가능한 DataConverter 솔루션을 제공하는 것이 었습니다.
여러분은 모범 사례로서 무엇을 제안합니까? 완전한 다른 디자인은, 세바스찬
이 ... 그러나 달성하기 어렵고 파괴하기 쉬운 'convert'가'delete this'로 끝나지 않는 한, 그것은 겁에 질리게됩니다.) –
그것은 다른 것보다 더 많은 의사 코드입니다. –