2009-11-24 3 views
11

¿Hay un equivalente de g ++ al argumento __declspec(novtable) de Visual Studio?¿Hay un equivalente de g ++ a __declspec (novtable) de Visual Studio?

Básicamente, en una clase base virtual pura, el argumento __declspec(novtable) se puede utilizar para suprimir la creación de un vtable para la clase base, así como el código de inicialización/desinicialización vtable en el contstructor/destructor, respectivamente. Por ejemplo,

class __declspec(novtable) PureVirtualBaseClass 
{ 
    public: 
     PureVirtualBaseClass(){} 
     virtual ~PureVirtualBaseClass() = 0; 
}; 

Consulte Paul DiLascia's article para obtener más información. También vea mi relacionado question.

+0

Simplemente curioso: me parece que descartar el vtable para PureVirtualBaseClass es una microoptimización, y generalmente muy pequeña. ¿Cuál es el motivo para querer hacer esto? – Managu

+0

Lea el artículo de DiLascia, él explica las razones por las cuales quiere hacer esto mejor que yo. – paxos1977

+0

También encontró este http://msdn.microsoft.com/en-us/library/k13k85ky.aspx hoy en MSDN donde sugieren que puede haber una reducción significativa en el tamaño del programa usando __declspec (novtable). – paxos1977

Respuesta

7

No creo que haya uno, si lo hubiera, se incluiría en la lista bajo el type attributes page del manual de GCC. GCC usa atributos de tipo para agregar anotaciones adicionales a tipos (como alineación y relleno), pero no hay un atributo de tipo equivalente a __declspc(novtable) allí enumerado.

Tampoco veo ningún indicador de compilador en el man page relacionado con esta optimización.

Cuestiones relacionadas