Eso no tendría sentido. El objetivo de las funciones de miembro virtual es que se envían en función del tipo dinámico de la instancia de objeto en el que se llaman. Por otro lado, las funciones estáticas no están relacionadas con ninguna instancia y son más bien una propiedad de la clase . Por lo tanto, no tiene sentido que sean virtuales. Si debe, se puede utilizar un despachador no estático:
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); }
};
Uso:
Base & b = get_instance();
b.call_static(); // dispatched dynamically
// Normal use of statics:
Base::foo(b);
Derived::bar(-8, true);
Una posible solución es hacer que un método estático (pero no virtual) en la clase base y hacerlo de compra equivalentes método estático en la clase Derivada. De esta manera, aún conservas la encapsulación y el polimorfismo. – anni