我需要在std::vector
和_variant_t
之间进行转换,以避免在将数据写入/发送到某个文件(数据库,Excel等)时进行循环。
能告诉我如何处理吗?
我试图获得std::vector<_variant_t>
并以某种方式放入另一个_variant_t
变量,但不支持直接转换,即使已完成,也没有任何方法或某种包装器来获取此向量进入_variant_t
变量。
我不想处理任何循环。
答案 0 :(得分:6)
std::vector
和_variant_t
是不兼容的类型。 _variant_t
类型旨在支持COM接口需要支持相同参数的多种类型值的场景。它的一组值仅限于COM了解如何编组的值。 std::vectory
不是其中之一。
将值集合存储到_variant_t
的标准方法是将其作为安全数组。因此,最简单的解决方案是将std::vector
转换为安全数组并将其存储在变体中。这里真的没办法避免循环
// Convert to a safe array
CComSafeArary<INT> safeArray;
std::vector<int> col = ...;
for (std::vector<int>::const_iteator it = col.begin(); it != col.end(); it++) {
safeArray.Add(*it);
}
// Initialize the variant
VARIANT vt;
VariantInit(&vt);
vt.vt = VT_ARRAY | VT_INT;
vt.parray = safeArray.Detach();
// Create the _variant_t
_variant_t variant;
variant.Attach(vt);