我通常几乎不加思索地使用前向声明,这样我就不必包含标题。这个例子中的一些东西:
//-----------------------
// foo.h
//-----------------------
class foo
{
foo();
~foo();
};
//-----------------------
// bar.h
//-----------------------
class foo; // forward declaration
class bar
{
bar();
~bar();
foo* foo_pointer;
};
一些开发人员喜欢使用这种方法来避免包含圈的问题。我宁愿用它来最小化广泛包含层次结构中的开销,这是物理设计的重要部分(特别是对于较大的项目)。
但是,在某些情况下,我真的很喜欢将成员声明为普通对象而不是指针,以从自动构造/销毁机制中受益。这导致不能再使用前向声明的问题,因为在这种情况下编译器需要类定义,例如:
//-----------------------
// foo.h
//-----------------------
class foo
{
foo();
~foo();
};
//-----------------------
// bar.h
//-----------------------
class foo; // Not enough given the way we declare "foo_object"..
#include "foo.h" // ..instead this is required
class bar
{
bar();
~bar();
foo foo_object;
};
所以,如果有人知道可以在这里使用的替代语言结构,我会很高兴,这样我就可以声明“foo_object”,如示例中所示,但不包括其标题。
问候
/罗伯特