2014-01-15 51 views
2

我有一个BaseInterface类,它有一个虚拟无效的execute()由派生类实现:如何找出其派生类处理

class BaseInterface 
{ 
public: 
    virtual void execute(int a) = 0; 
} 

而且我有覆盖执行无效吨派生类的:

class ProcessN : public BaseInterface 
{ 
public: 
    void execute(int a); 
} 

执行无效的我的派生类之一有一个错误。但是有很多派生类。要逐一检查它们是非常困难的。我很难找到这个bug。

C++中是否有一种方法可以通过基类找出哪个派生类正在处理它呢?

编辑: 好吧,我改进的意见了有益的探讨后,我的问题:

我可以实现BaseInterface类的构造函数里面的东西,打印出当前处理派生类的信息?

+0

如果你已经能够确定的是,派生类的一个在'execute'一个bug,大概有像一些代码,所以'ptrToBaseIntfThatPointsToObjOfProcessK->执行(0);'某处触发错误?考虑在调试器中设置一个条件断点。 –

+0

该错误不是简单的可调试的,它在视图上产生视觉差异。 – Rancs

+0

是否有可能从基类的构造函数中获取ptrofderived类? – Rancs

回答

1

您正在寻找的typeid

BaseInterface *a = new Process1(); 
BaseInterface *b = new Process2(); 

cout << typeid(*a).name() << endl; 
cout << typeid(*b).name() << endl; 

或者,如果你想你的execute(),你只需简单地使用typeid的内部使用(*此)

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(); } 
}; 
+0

再次在这里,我们检查所有的进程一个接一个,不是吗? – Rancs

+0

你没有足够清楚地描述你的问题。您想做什么?您的process1到N将逐个运行,并且每当有错误时,您都会写入日志文件或在每次执行时将其打印到stdio中,以便您知道哪一个当前正在运行? – user534498

+0

我可以用cout做同样的事情<<“你好我是ProcessX”<< endl;在每个派生类中。我需要一种方法在派生类中写入一次,并在派生类对其进行操作时获取输出。 – Rancs

0

如何执行所被调用。 ...也许你可以在基类中引入一个静态方法,它将一个Baseclass指针作为参数,并在执行之前调用此方法,并使用BasePointer从派生对象中的派生对象中打印出必要的信息,以查看它是哪个派生类对象。 根据我的理解,我建议如下。如果它没有帮助一切顺利。

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

嘿Munni,我问是否有一种方式不触摸派生物体。 – Rancs

+0

请分享你的代码如何呼吁执行..... – Straw

+0

你读的问题? – Rancs

相关问题