2
如何在C++ Builder 10中將變體轉換爲布爾?將變體轉換爲布爾
在舊bcc32編譯器,我用下面的代碼來檢查一些通用TComponent是否啓用:
if ((bool)GetPropValue(c, "Enabled", false))
do_something();
然而,升級到C++ Builder中10和啓用新的基於鏘編譯後,我得到以下錯誤:
[CLANG Error] VclHelpers.cpp(1375): ambiguous conversion for C-style cast from 'System::Variant' to 'bool'
完整的編譯器的消息表明,Variant的轉換操作符36被認爲是合法的候選人:operator double()
,operator wchar_t*
等
我一直沒有使用C++ Builder,但一個選項應該是轉換爲int? – user2672165
@ user2672165 - 是的,這似乎工作,雖然它似乎不雅。 –
@JoshKelley:你爲什麼還要爲RTTI煩惱呢? 'TControl :: Enabled'屬性是** public **,所以你可以這樣做:'if(c-> Enabled)...'。如果你打算使用RTTI,那麼你可以考慮使用'TRttiProperty :: GetValue()'而不是'GetPropValue()',因爲'TRttiProperty :: GetValue()'返回一個'TValue',它有一個'AsBoolean )'方法。 'TRttiContext ctx; if(ctx.GetType(c-> ClassType()) - > GetProperty(「Enabled」) - > GetValue(c).AsBoolean())...' –