Я обычно, почти не задумываясь, использую форвардные объявления, поэтому мне не нужно включать заголовки. Что-то в этом примере:
//-----------------------
// 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", как показано в примере, но без включения его заголовка.
Привет
/Роберт