2016-09-18 2 views
0

Я преобразования VARIANT в целое, используя подталкивание :: lexical_cast, как показано ниже:Как конвертировать VARIANT в целое

component.m_id= boost::lexical_cast<int>(id.intVal); 

Но похоже, я получаю значение мусора здесь: id.intVal. Что я здесь делаю неправильно?

+0

пожалуйста пройти через этот документ http://www.boost.org/doc/libs/1_55_0/doc/ html/boost_lexical_cast/examples.html –

+1

'boost :: lexical_cast' не имеет смысла использовать' VARIANT'. Каково значение 'id.vt' в этом контексте? – ildjarn

+0

Значение: id.vt 8 –

ответ

2

Если вы действительно не знаете тип варианта (в вашем примере это строка, представленная как 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); 
0

вы можете использовать подталкивание :: получить. Но не для кастинга. Это для извлечения реального типа из boost :: variant. Пример: Предположим, у вас есть:

boost::variant<bool, int, double> v myVariant; 
myVariant = true; 

вы должны использовать:

bool value = boost::get<bool>(myVariant); 

и не

double value = boost::get<double>(myVariant); 

в противном случае он будет сбой.

Как только у вас есть значение, вы можете его бросить.

Если вы не знаете тип установленного на вас увеличить вариант, вы должны использовать: подталкивание :: apply_visitor <> как в примере на ссылку ниже, в конце страницы:

http://www.boost.org/doc/libs/1_61_0/doc/html/variant.html

, но это означает, что вы должны сделать это для каждого типа в вашем наддува :: вариант

Смежные вопросы