我正在处理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
代码放在由libA
和libB
所使用的标头中,循环依赖关系就会消失。