有沒有辦法從GCC獲取編譯時typeid
的信息,RTTI禁用?在Visual Studio下,一個簡單的命令如const char* typeName = typeid(int).name();
將適當地返回「int」,即使RTTI被禁用。不幸的是,GCC不能這樣做。當我嘗試在沒有RTTI的情況下撥打typeid
時,我的程序崩潰。我知道禁用RTTI不是標準的一部分,但無論如何,我可以強制GCC編譯已知類型的時間分辨率嗎?使用GCC編譯時間typeid而沒有RTTI
由於性能原因,RTTI被禁用。我不需要運行時RTTI。
編輯:
這裏是我結束了去:
template<typename T> const char* TypeName(void);
template<typename T> const char* TypeName(T type) { return TypeName<T>(); }
#define REFLECTION_REGISTER_TYPE(type) \
template <> const char* TypeName<type>(void) { return #type; }
它要求REFLECTION_REGISTER_TYPE
堪稱爲每個需要反思信息類型。但只要它需要每種所需的類型,撥打TypeName<int>
就能完美工作。我還添加了功能TypeName(T type)
這意味着你可以做這樣的事情:int x = 0; printf(TypeName(x));
它會打印出「int」。 GCC應該能夠像VC++一樣在編譯時做到這一點。
什麼性能方面的原因你關心? RTTI本質上是免費的,節省一些二進制大小的開銷。 –
@Kyle:在啓用了RTTI的g ++中,'typeid(int).name()'將返回「i」而不是「int」。這是相關的嗎? –
@R。 Martinho Fernandes:海灣合作委員會有一些可以將「我」變成「int」的解除功能。 – Kyle