C++ での循環依存の問題を扱っています。
状況は次のようになります。
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
libA は libB の Converter-Class を使用し、libB は変換する必要がある libA のオブジェクト タイプについて必要があるため、周期的な依存関係があります。これは、DataConverter::convert が Body または Header オブジェクトを返すためです。
この問題を前方宣言で解決することを考えましたが、それは私にとって最もクリーンな解決策ではないようです。全体として、私の計画は拡張可能な DataConverter ソリューションを提供することでした。
ベストプラクティスとして何を提案しますか? 全く違うデザインも大歓迎です:)
ベスト、セバスチャン