2011-12-03 8 views
8

Supresywna generacja vtable w C++ może być wykonana w MSVC przy użyciu atrybutu __declspec(novtable). Jednak wydaje się, że dla kompilatora GNU C++ jest to there is no equivalent attribute. Faktem jest, że pozostawienie vtables dla czystych wirtualnych klas niepotrzebnie łączy w __cxa_abort() i wielu innych i chcę tego uniknąć, ponieważ programuję dla systemu wbudowanego. Więc co powinienem zrobić?Jak wyłączyć generowanie vtable w C++ dla czystych klas wirtualnych za pomocą G ++?

struct ISomeInterface 
{ 
    virtual void Func() = 0; 
}; 

class CSomeClass : public ISomeInterface 
{ 
    virtual void Func(); 
} 

void CSomeClass::Func() 
{ 
    //... 
} 

Odpowiedz

0

Flaga kompilator -fno-rtti zatrzymuje generacji rtti.

Z mojego doświadczenia z C++ na platformach wbudowanych uniemożliwiło to wystąpienie błędów kompilatora vtable, sugerując, że uniemożliwiają one ich utworzenie (i konsekwentnie, funkcje wirtualne nie będą działać).