Questo non avrebbe senso. Il punto delle funzioni membro virtuali è che vengono inviate in base al tipo dinamico dell'istanza dell'oggetto in cui vengono chiamate. D'altra parte, le funzioni statiche non sono correlate a nessuna istanza e sono piuttosto una proprietà della classe . Quindi non ha senso che siano virtuali. Se è necessario, è possibile utilizzare un dispatcher non statico:
struct Base
{
static void foo(Base & b) { /*...*/ }
virtual ~Base() { }
virtual void call_static() { foo(*this); /* or whatever */ }
};
struct Derived : Base
{
static void bar(int a, bool b) { /* ... */ }
virtual void call_static() { bar(12, false); }
};
Usage:
Base & b = get_instance();
b.call_static(); // dispatched dynamically
// Normal use of statics:
Base::foo(b);
Derived::bar(-8, true);
fonte
2012-03-25 18:58:52
Una possibile soluzione è quella di rendere un metodo statico (ma non virtuale) in classe di base e renderlo chiamare equivalente metodo statico nella classe derivata. In questo modo continui a mantenere l'incapsulamento e il polimorfismo. – anni