¿Hay alguna fácil de usar, clases de alto nivel o bibliotecas que le permiten interactuar con VARIANT
s en Visual C++?Una manera simple de convertir a/de tipos de variantes en C++
Más específicamente, me gustaría para convertir entre tipos de POD (por ejemplo double
, long
), cadenas (por ejemplo CString
), y los contenedores (por ejemplo std::vector
) y VARIANT
s. Por ejemplo:
long val = 42;
VARIANT var;
if (ToVariant(val, var)) ... // tries to convert long -> VARIANT
comObjPtr->someFunc(var);
std::vector<double> vec;
VARIANT var = comObjPtr->otherFunc();
if (FromVariant(var, vec)) ... // tries VARIANT -> std::vector<double>
I (? Ingenuamente) supone que las personas que trabajan con COM hacen esto todo el tiempo, por lo que sería más probable es que sea una sola biblioteca convenienteque se encarga de todo tipo de conversiones. Pero todo lo que he podido encontrar es un variado surtido de clases contenedoras que convierten cada unos tipos:
- _variant_t o CComVariant para este tipo POD
- _bstr_t, CComBSTR o BSTR para cuerdas
- CComSafeArray o SAFEARRAY para matrices
¿hay alguna forma sencilla - corto de cambiar a Visual Basic - para evitar esta pesadilla de gestionar la memoria incómoda y código bit a bit VT_ARRAY | VT_I4
?
preguntas relacionadas:
- CComVariant vs. _variant_t, CComBSTR vs. _bstr_t
- Convert VARIANT to...?
- How to best convert VARIANT_BOOL to C++ bool?
La pregunta realmente no se aplica a [C++] (que no tiene esa construcción), solo el dialecto visual. – dmckee
@dmckee: es cierto. –
Para cualquier persona que sienta curiosidad por lo que POD significa aquí, hay una respuesta de desbordamiento de pila. http://stackoverflow.com/questions/146452/what-are-pod-types-in-c –