如果给我的类型的声明不包含Q_OBJECT
宏,我有一些有趣的需要显示编译错误。我发现了一种不好的方法。实际上它重复了 Qt 开发人员的想法来做同样的伎俩:
template<typename T>
void checkForQObjectMacro()
{
reinterpret_cast<T *>(0)->qt_check_for_QOBJECT_macro(*reinterpret_cast<T *>(0));
}
这很好用,但它确实给出了奇怪的错误消息。我想显示一条可读的消息。一种方法是使用static_assert
构造。但我不知道如何实现Q_OBJECT
宏存在的静态验证条件。也许有人可以提出一个漂亮的黑客?也非常感谢任何想法。