【发布时间】:2012-09-01 10:21:38
【问题描述】:
我正在处理 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 的 Object-Types - 因为 DataConverter::convert 返回一个 Body 或 Header 对象。
我曾考虑通过前向声明来解决这个问题 - 但这对我来说似乎不是最干净的解决方案。总而言之,我的计划是提供一个可扩展的 DataConverter 解决方案。
你们认为最佳做法是什么?也欢迎完全不同的设计:)
最好, 塞巴斯蒂安
【问题讨论】:
-
对我来说这看起来像是内存泄漏——你几乎肯定想要
DataConverter<Body>().convert(&data),没有new(除非convert以delete this结尾,但这太可怕了)。跨度> -
这是比其他任何东西都更多的伪代码:)
标签: c++ templates circular-dependency extensible