четверг, 3 июня 2010 г.

typedef forward declare

При реализации PIMPL идиомы скрывается реализация и необходимо писать предварительные определения(forward declaration) классов, структур и прочего. Возникает вопрос — как написать предварительное объявление для typedef. Делается это следующим образом: сначала определяем класс, который учавствует в typedef, а потом пишем само определение. Например,
class A;
typedef std::shared_ptr<A> A_ptr;

Интересно, что стандарт запрещает писать предварительные объявления для классов стандартной библиотеки (17.4.2.1/3). Единственно правильный вариант — включать стандартные файлы. Для группы iosteam классов в стандарте сделан отдельный файл <iosfwd> (27.2) с преварительным определениями. Его можно включать и программа будет считаться корректной.

Комментировать в ВКонтакте