К моему великому разочарованию, это невозможно.
В качестве альтернативы Verdigris библиотека. Он полностью совместим с Qt и позволяет использовать средства Qt без необходимости вызывать MO C, поэтому вы не получите ошибку при отсутствии Q_NAMESPACE.
Но вам нужно будет перечислить все ваши значения перечисления в макросе W_ENUM_NS и W_NAMESPACE_IMPL в некотором исходном файле
//foo.h
#pragma once
#include "wobjectdefs.h"
namespace lib
{
W_NAMESPACE(lib)
enum class Foo {
A,
B,
};
W_ENUM_NS(Foo, Foo::A, Foo::B)
} // namespace lib
-
// bar.h
#pragma once
#include "foo.h"
#include "wobjectdefs.h"
namespace lib
{
enum class Bar {
A,
B,
};
W_ENUM_NS(Bar, Bar::A, Bar::B)
} // namespace lib
-
#include <QCoreApplication>
#include <QDebug>
#include "bar.h"
#include "foo.h"
#include "wobjectimpl.h"
namespace lib
{
W_NAMESPACE_IMPL(lib)
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << lib::Bar::A;
qDebug() << lib::Foo::A;
return a.exec();
}