我將VARIANT使用boost :: lexical_cast的,如下爲int:如何轉換VARIANT整數
component.m_id= boost::lexical_cast<int>(id.intVal);
不過貌似我在這裏獲得垃圾值:id.intVal。我在這裏做錯了什麼?
我將VARIANT使用boost :: lexical_cast的,如下爲int:如何轉換VARIANT整數
component.m_id= boost::lexical_cast<int>(id.intVal);
不過貌似我在這裏獲得垃圾值:id.intVal。我在這裏做錯了什麼?
如果你真的不知道該變種所持有的類型(在你的例子中,它似乎是一個表示爲VT_BSTR的字符串),最好和最安全的方法是調用Windows API VariantChangeType(或VariantChangeTypeEx本地化是一個問題);這裏有一個例子(提高特異性不):
VARIANT vIn;
VariantInit(&vIn);
vIn.vt = VT_BSTR;
vIn.bstrVal = ::SysAllocString(L"12345678");
VARIANT vOut;
VariantInit(&vOut);
// convert the input variant into a 32-bit integer
// this works also for other compatible types, not only BSTR
if (S_OK == VariantChangeType(&vOut, &vIn, 0, VT_I4))
{
// now, you can safely use the intVal member
printf("out int: %i\n", vOut.intVal);
}
VariantClear(&vOut);
VariantClear(&vIn);
可以使用的boost ::得到。但不適用於鑄造。它用於從boost :: variant中提取真實類型。例如: 假設你有:
boost::variant<bool, int, double> v myVariant;
myVariant = true;
,你必須使用:
bool value = boost::get<bool>(myVariant);
,而不是
double value = boost::get<double>(myVariant);
否則會崩潰。
一旦你有了值,你可以施放它。
如果你不知道你設置你提高變異的類型,你必須使用:的boost :: apply_visitor的<>像在下面的鏈接的例子,在頁面的末尾:
http://www.boost.org/doc/libs/1_61_0/doc/html/variant.html
不過這意味着你必須這樣做,對每種類型在你的boost ::變種
請到通過這個文件http://www.boost.org/doc/libs/1_55_0/doc/ html/boost_lexical_cast/examples.html –
'boost :: lexical_cast'對'VARIANT'沒有用處。在這種情況下'id.vt'的價值是什麼? – ildjarn
值爲:id.vt 8 –