Que C ++ hace tener una implementación polimorfismo estático de interfaz que no utiliza vtable?

StackOverflow https://stackoverflow.com/questions/2587541

Pregunta

que C ++ hace tener una correcta aplicación de interfaz que no utiliza vtable?

por ejemplo

class BaseInterface{
public:
virtual void func() const = 0;
}

class BaseInterfaceImpl:public BaseInterface{
public:
void func(){ std::cout<<"called."<<endl; }
}

BaseInterface* obj = new BaseInterfaceImpl();
obj->func();

la llamada a func en la última línea va a VTABLE para encontrar el PTR func de BaseInterfaceImpl :: func, pero ¿hay alguna C ++ manera de hacerlo directamente como BaseInterfaceImpl no es una subclase de cualquier otra clase, además de la clase de interfaz pura BaseInterface?

Gracias. Gil.

¿Fue útil?

Solución

Sí. Se conoce por el apodo CRTP . Tener un vistazo.

Otros consejos

creo que en cualquier idioma, que va a tener que ir a un equivalente de un vtable con el fin de hacer envío dinámico a menos que conozca en tiempo de compilación cuáles son las necesidades función que se llama. Esto podría ser el resultado de una optimización del compilador inteligente, o una técnica tal como CRTP (que wheaties ya mencionado).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top