className() を呼び出す QMetaData と QObject を調べてきました。これを自分のクラスで複製したいのですが、QT がどのようにそれを行うのかわかりません。つまり、次のことを行いますが、正しいクラスが出力されません (構文エラーは無視してください)。
#include <iostream>
#define CLASS(name) \
std::string className() { \
return #name; \
}
class A {
public:
CLASS(A)
A(){}
~A(){}
void output() {
std::cout << className() << std::endl;
}
};
class B: public A{
public:
CLASS(B)
B(){}
~B(){}
};
int main() {
B b;
b.output(); // This obviously outputs "A" but I would
// like it to output "B" from the base class
// function
return 0;
}
Qt では、Q_OBJECT マクロだけのコードを追加する必要はなく、基本クラスに出力関数がある場合でも、基本クラスから派生クラスの className を取得できます (Qt では QObject:: を意味します)。 debugObjectTree()))。基本クラスがその派生クラスのクラス名を出力できる場合、派生クラスに余分なコードを追加せずに (おそらくマクロを除く)、Qt はどのようにこの効果を達成するのでしょうか?
前もって感謝します。