Я не знаю о повышении, но эти предварительные объявления также существуют в стандартной библиотеке.Например, <iosfwd>
содержит прямые объявления для потоков (которые являются шаблонами, обычно скрытыми за typedefs).
Этот заголовок полезен при объявлении перегруженного оператора <<. </p>
В вашем заголовке:
#include <iosfwd>
class X { ... };
std::ostream& operator<< (std::ostream& os, const X& x);
Обратите внимание, что заголовок не требует полного определения ostream
(= basic_ostream<char, char_traits<char> >
).
Обоснование заголовка заключается в том, что эти шаблоныгромоздки, чтобы вперед объявить себя.Для приведенного выше примера это будет выглядеть примерно так:
namespace std {
template <class CharT>
class char_traits;
template <class CharT, class CharTraits>
class basic_ostream;
typedef basic_ostream<char, char_traits<char> > ostream;
}