Пишу утилиту для генерации кода и мне было бы удобно все типы сделать forward declaration в одном файле, а в заголовочных файлах подключать этот файл (по определению, все типы в заголовочных файлах — указатели, наследования нет). Какие могут быть подводные камни?
Здравствуйте, MTD, Вы писали:
MTD>Пишу утилиту для генерации кода и мне было бы удобно все типы сделать forward declaration в одном файле, а в заголовочных файлах подключать этот файл (по определению, все типы в заголовочных файлах — указатели, наследования нет). Какие могут быть подводные камни?
Никаких, сам так делаю, причём в неавтогенерённом коде.
Здравствуйте, MTD, Вы писали:
MTD>Пишу утилиту для генерации кода и мне было бы удобно все типы сделать forward declaration в одном файле, а в заголовочных файлах подключать этот файл (по определению, все типы в заголовочных файлах — указатели, наследования нет). Какие могут быть подводные камни?
неполучится форвардить типы в классах.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, MTD, Вы писали: MTD>Пишу утилиту для генерации кода и мне было бы удобно все типы сделать forward declaration в одном файле, а в заголовочных файлах подключать этот файл (по определению, все типы в заголовочных файлах — указатели, наследования нет). Какие могут быть подводные камни?
Использую PCH (для Qt) и не заморачиваюсь. Примерно так:
Скрытый текст
#ifndef COMMON_PCH_H
#define COMMON_PCH_H
#ifdef Q_OS_WIN
# define _WIN32_WINNT 0x0501
#endif
#ifdef QT_CORE_LIB
# include <QtCore>
#endif
#ifdef QT_GUI_LIB
# include <QtGui>
#endif
#ifdef QT_MULTIMEDIA_LIB
# include <QtMultimedia>
#endif
#ifdef QT_NETWORK_LIB
# include <QtNetwork>
#endif
#ifdef QT_XML_LIB
# include <QtXml>
#endif
#ifdef QT_QML_LIB
# include <QtQml>
#endif
#ifdef QT_QUICK_LIB
# include <QtQuick>
#endif
#endif// COMMON_PCH_H
Очень существенно ускоряет сборку в msvc. Плюс упрощает написание кода. В Qt очень часто используется forward declaration и порой напрягает каждый раз бегать в начало файла и вписывать туда нужный инклюд. А потом и подчищать ненужные инклюды.