我正在处理 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 的转换器类,而 libB 现在需要了解需要转换的 libA 的对象类型 - 因为 DataConverter::convert 返回一个 Body 或 Header 对象。
我想过用前向声明来解决这个问题——但这对我来说似乎不是最干净的解决方案。总而言之,我的计划是提供一个可扩展的 DataConverter 解决方案。
作为最佳实践,你们有什么建议?也欢迎完全不同的设计:)
最好的, 塞巴斯蒂安
最佳答案
如果您需要一个类模板DataConverter
,那么它不能是任何已编译库的一部分。它必须通过包含文件可用。一旦您将 DataConverter
代码放入 header 中,由 libA
和 libB
使用,您的循环依赖性就会消失。
关于使用类模板的 C++ 循环依赖 - 如何重构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12226927/