关于c ++:如何找出正在处理的派生类


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;
}