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