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解决方案.
你们有什么建议作为最佳做法?一个完全不同的设计也欢迎:)
最好,塞巴斯蒂安
如果您需要类模板DataConverter,那么这不能是任何已编译库的一部分.它必须通过包含文件提供.一旦你把DataConverter代码中的标题,使用两个libA和libB你的循环依赖消失.