que tienen una clase base abstractamétodos abstractos estáticos en C++
class IThingy
{
virtual void method1() = 0;
virtual void method2() = 0;
};
quiero decir - "todas las clases que proporcionan una ejemplificación concreta deben proporcionar estos métodos estáticos también"
me siento tentado a hacer
class IThingy
{
virtual void method1() = 0;
virtual void method2() = 0;
static virtual IThingy Factory() = 0;
};
Sé que no compila, y de todos modos no está claro cómo usarlo, incluso si compiló. Y de todos modos puedo simplemente hacer
Concrete::Factory(); // concrete is implementation of ITHingy
sin mencionar fábrica en la clase base en absoluto.
Pero creo que debería haber alguna manera de expresar el contrato al que quiero que firmen las implementaciones.
¿Hay un idioma bien conocido para esto? ¿O simplemente lo pongo en comentarios? Tal vez no debería intentar forzar esto de todos modos
Editar: Pude sentirme vago mientras escribía la pregunta. Siento que debería haber alguna forma de expresarlo. Igor da una respuesta elegante, pero de hecho muestra que realmente no ayuda. Todavía acaban de tener que hacer
IThingy *p;
if(..)
p = new Cl1();
else if(..)
p = new Cl2();
else if(..)
p = new Cl3();
etc.
supongo idiomas reflectantes, como C#, Python o Java podría ofrecer una mejor solución
No estoy muy seguro de lo que quiere. ¿Estás buscando un método 'clon'? – GManNickG
Supongo que realmente no veo una situación en el mundo real en la que necesites algo así? El polimorfismo solo tiene sentido en instancias reales. Los métodos estáticos son solo funciones regulares que usan el nombre de clase para MRO. Realmente no tiene sentido, en algún momento debe conocer el nombre del método class :: porque C++ está vinculado estáticamente. – rossipedia
Parece que quiere especificar que las subclases tengan un método Factory estático. Y Bryan, deberías mover eso al espacio de respuestas. – jdmichal