コンストラクターを完全に連鎖させずに、基本クラスから派生クラス名を出力するにはどうすればよいですか。言い換えれば、各派生クラスにコードを追加せずに、基本クラスから厳密にこれを行うことは可能ですか?
これは私が得たものの例であり、コンストラクターの連鎖を取り除く方法があれば。
編集: 理想的には、すべての派生クラスを編集することなく、基本クラスに追加するものを探しています。現時点では、私の実際のコードには最大17のクラスがあり(さらに必要です)、基本クラスから直接ジョブを実行できるものが理想的です。コンパイラ固有(g ++またはclang)であっても。
#include <iostream>
class Base {
public:
Base(std::string id) {
std::cout<<"Creating "<<id<<std::endl;
}
};
class Child : Base {
public:
Child(std::string id) : Base(id) {}
Child() : Base(typeid(this).name()) {}
};
class GrandChild : Child {
public:
GrandChild(std::string id) : Child(id) {}
GrandChild() : Child(typeid(this).name()) {}
};
class GrandGrandChild : GrandChild {
public:
GrandGrandChild(std::string id) : GrandChild(id) {}
GrandGrandChild() : GrandChild(typeid(this).name()) {}
};
int main() {
GrandGrandChild *A = new GrandGrandChild();
GrandChild *B = new GrandChild();
Child *C = new Child();
return 0;
}
どの印刷物:
Creating GrandGrandChild
Creating GrandChild
Creating Child
しかし、コンパイルされた追加のプレフィックスがあります。