How to find out which derived class is processing
我有一个baseInterface类,其中一个虚拟的void execute()将由派生类实现:
1 2 3 4 5 | class BaseInterface { public: virtual void execute(int a) = 0; } |
我有很多派生类覆盖了execute void:
1 2 3 4 5 | class ProcessN : public BaseInterface { public: void execute(int a); } |
我的一个派生类的execute void有一个bug。但是有很多派生类。每一个都很难逐一检查。我很难找到那个虫子。
C++中是否有一种方法通过基类来发现,派生类目前正在对它进行处理?
编辑:好的,我在对评论进行了有益的讨论后改进了我的问题:
我可以在BaseInterface类的构造函数内部实现一些东西,以打印出当前处理派生类的信息吗?
你在找typeid
1 2 3 4 5 | BaseInterface *a = new Process1(); BaseInterface *b = new Process2(); cout << typeid(*a).name() << endl; cout << typeid(*b).name() << endl; |
或者,如果您想在execute()中使用,只需使用typeid(*this)
1 2 3 4 5 6 7 8 9 10 11 12 | class BaseInterface { public: virtual void execute(int a) = 0; //debug helper void print_info() { cout << typeid(*this).name() << endl; } }; class ProcessN : public BaseInterface { void execute(int a) { print_info(); } }; |
如何调用Execute…。您可以在基类中引入一个静态方法,该方法以baseClass指针为参数,并在执行之前调用此方法,并使用basePointer打印此方法中派生对象的必要信息,以查看它是哪个派生类对象。根据我的理解,我建议如下。如果它不能帮助所有最好的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | class Base { public: virtual void exec(int i) =0 ; static void check(Base* temp) { cout<<"Type of obj"<<typeid(*temp).name()<<endl; } }; class Derived1 : public Base { public: void exec(int i) { cout<<"Der1 Exe"<<i<<endl; } }; class Derived2 : public Base { public: void exec(int i) { cout<<"Der2 Exe"<<i<<endl; } }; int main() { Base *client = NULL; Derived1 lder1; Derived2 lder2; client= &lder2; Base::check(client); client->exec(0); client= &lder1; Base::check(client); client->exec(0); return 0; } |