我正在处理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解决方案。

你们建议最佳做法是什么?也欢迎使用其他完整设计:)

最好,
塞巴斯蒂安

最佳答案

如果需要类模板DataConverter,则该模板不能成为任何已编译库的一部分。它必须通过包含文件可用。一旦将DataConverter代码放在由libAlibB所使用的标头中,循环依赖关系就会消失。

10-08 19:32