Как я могу использовать каскадные пространства имен в файлах moc?

В настоящее время я пишу небольшое приложение с Qt (4.7). И я использую вложенные пространства имен, такие как

namespace app {
    namespace core {
        class CoreClass {...}
    }
}

Поскольку я немного ленив, я использую символы для ярлыков, которые содержат открывающие и закрывающие объявления пространств имен:

APP_START
    class CoreClass {...}
APP_END

Символы определены в глобальном заголовочном файле.

Все идет нормально. Он отлично работает во время компиляции. Но когда генератор moc создает файлы moc, он пропускает объявления пространств имен, и методы генерируются в стандартном пространстве имен. Когда не используйте символы, все работает нормально.

Когда я переопределяю символ QT_BEGIN_MOC_NAMESPACE, компилятор выдает предупреждение о переопределении при каждом включении. Это действительно работает, но я думаю, что это не очень приятно.

Есть ли лучшее решение этой проблемы?


person Christian Smolka    schedule 27.02.2011    source источник


Ответы (1)


Сначала я узнаю, почему moc не выполняет подстановку макросов. Может быть, я ошибаюсь?

Во-вторых, вы можете попробовать использовать параметр -D для moc. Может быть что-то вроде: moc "-DAPP_BEGIN=namespace app { namespace core {"

person Sohail    schedule 27.02.2011
comment
Я не думаю, что это так, потому что я использую Qt Creator. Ваш подход к выяснению того, почему moc не выполняет подстановку, мне кажется хорошим. Я следую этому. - person Christian Smolka; 01.03.2011
comment
Я немного поигрался с генератором moc из инструментов Qt. И кажется, что нет способа заставить его анализировать директивы препроцессора. Печальный. - person Christian Smolka; 01.03.2011