2012-03-27 6 views
3

Ich versuche eine Möglichkeit zu finden, die abgeleitete Klasse zu überprüfen, ob eine Methode der Basisklasse als 'virtual' definiert ist. Grundsätzlich hätte ich gerne folgenden Code:Kompilierzeitüberprüfung, ob eine Methode als virtuell definiert ist

class A { 
    virtual void vfoo() {} 
    void foo() {} 
    virtual ~A() {} 
}; 

class B : public A { 
    virtual void vfoo() { 
    MAGIC_CHECK(m_pA->vfoo()); // succeed 
    // code 
    m_pA->vfoo(); 
    // code 
    } 
    virtual void foo() { 
    MAGIC_CHECK(m_pA->foo()); // fail compilation because foo is not virtual! 
    // code 
    m_pA->foo(); 
    // code 
    } 
    A * m_pA; 
}; 

Die Frage ist, wie implementiere ich diesen MAGIC_CHECK? Eine Lösung hierfür könnte die Verwendung des Flags -Woverloaded-virtual compilation sein. Kann jemand eine Lösung vorschlagen, die diese Fahne nicht einschließt?

Danke!

Antwort

1

In C++ 03 Standard, es ist nicht möglich zu überprüfen, ob eine Methode als virtual oder nicht deklariert ist.
Sie folgen können,

  • Codierungsstandards
  • Peer-Review
  • möglicherweise einige statische Analyse-Tool
3

In C++ 11 ist es möglich, override am Ende der Funktionsdeklaration in den class hinzufügen und es wird eine Warnung ergeben, wenn die Funktion nicht alles außer Kraft setzen:

class B : public A { 
    virtual void vfoo() override { //OK 
    } 
    virtual void foo() override { //error 
    } 
}; 
+0

Wird es auch 'virtual'ness überprüfen? – iammilind

+0

@iammilind was meinst du? –

+0

@iammilind oh, ja ... es wird den Build brechen, wenn die Basismethode nicht virtuell ist. –

Verwandte Themen