Q_OBJECT
与えられた型の宣言にマクロが含まれていない場合、コンパイル エラーを表示する必要があります。私はそれを行うための1つの悪い方法を見つけました。実際には、Qt 開発者が同じトリックを行うというアイデアを繰り返しています。
template<typename T>
void checkForQObjectMacro()
{
reinterpret_cast<T *>(0)->qt_check_for_QOBJECT_macro(*reinterpret_cast<T *>(0));
}
これはうまく機能しますが、実際には奇妙なエラーメッセージが表示されます。読みやすいメッセージを表示したい。これを行う 1 つの方法は、static_assert
構築を使用することです。Q_OBJECT
しかし、静的に検証されたマクロの存在条件を実装する方法がわかりません。たぶん誰かが美しいハックを提案できますか? また、どんなアイデアでも大歓迎です。