使用类模板的C++循环依赖 - 如何重构?

Seb*_* B. 0 c++ templates circular-dependency extensible

我正在处理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
Run Code Online (Sandbox Code Playgroud)

存在循环依赖性,因为libA使用来自libB的Converter-Class,而libB现在需要关于需要转换的libA的Object-Types - 因为DataConverter :: convert返回Body或Header对象.

我考虑用前向声明解决这个问题 - 但这对我来说似乎不是最干净的解决方案.总而言之,我的计划是提供可扩展的DataConverter解决方案.

你们有什么建议作为最佳做法?一个完全不同的设计也欢迎:)

最好,塞巴斯蒂安

jua*_*nza 8

如果您需要类模板DataConverter,那么这不能是任何已编译库的一部分.它必须通过包含文件提供.一旦你把DataConverter代码中的标题,使用两个libAlibB你的循环依赖消失.