我正在上课
在课堂上,我使用boost :: graph :: adjacent_list作为私人成员。
但我不希望我的头文件包含boost头文件,因为任何其他文件包含我的头文件都需要包含boost头文件。
有没有办法可以避免在我自己的头文件中包含boost头文件。
我已尝试过前瞻声明,但失败了。
答案 0 :(得分:5)
你不能直接这样做,但是你可以解决不通过pimpl
你的类传播实现细节(boost)的根本问题。这实质上意味着您转发声明指向实现细节的指针,然后完全在源文件中实现。
答案 1 :(得分:2)
如果您的头文件只是定义,并且完全在cpp文件中实现(即头文件不对boost::graph::adjacent_list
执行任何操作,那么在标题中,您可以
bgalWrapper
结构。boost::graph::adjacent_list
bgalWrapper
struct(只有boost::graph::adjacent_list
成员)现在每个类都可以引用boost项,而不需要知道有关boost的标题。
这种模式可能有一个名称(和wikipage),但是自从我认真编写C ++以来已经有好几年了。
希望这有帮助。
更新我所描述的是PIMPL Idiom的部分实施 感谢Mark B
答案 2 :(得分:0)
我没有测试它,但你不能将列表定义为指针变量吗?然后前方声明应该成功。您必须嵌套命名空间:
using namespace boost::graph;
class adjacent_list;
class MyClass {
private adjacent_list<foo, bar> m_list;
}
或者也许:
namespace boost {
namespace graph {
class adjacent_list;
}
}
class MyClass {
private adjacent_list<foo, bar> m_list;
}
然后在您的实现文件中,只需将其用作指针:
#include <boost/graph/adj_list_serialize.hpp>
MyClass::MyClass() {
m_list = new adjacency_list<foo, bar>();
}