下面的代碼編譯罰款在Windows上使用Visual Studio:由於typeid()。raw_name()會導致C++代碼無法編譯GCC - 我該如何解決這個問題?
class_handle(base *ptr) : ptr_m(ptr), name_m(typeid(base).raw_name()) { signature_m = CLASS_HANDLE_SIGNATURE; }
如果我嘗試編譯Linux上的相同的代碼我得到:
error: ‘const class std::type_info’ has no member named ‘raw_name’
,據我瞭解,raw_name
是微軟specific執行。我該如何更改我的代碼才能編譯Windows和Linux系統?
EDIT1我寧願不修改原始代碼,我只是需要一個解決方法來使用gcc進行編譯。那可能嗎?
EDIT2會#define raw_name name
做詭計嗎?你知道在微軟的編譯器來定義令牌使用#ifdef
塊
// for variables:
template<typename T>
char const* GetRawName(T unused) { ... }
// for types:
template<typename T>
char const* GetRawName() { ... }
與Windows和不上的Windows不同的實現,但不是在你的其他編譯器:
切換到'name()'好嗎? –
@ R.MartinhoFernandes我寧願不修改原始代碼。任何解決方法? – memyself
@memyself沒有乾淨的,符合標準的解決方法。 (你可以重新定義''raw_name'',但是這樣會將你發送到一個特殊的地獄)。此外,沒有必要永遠使用'raw_name',所以我完全禁止它從代碼庫。 –