std :: vector和_variant_t之间的转换

时间:2011-08-31 17:56:21

标签: c++ com variant stdvector

我需要在std::vector_variant_t之间进行转换,以避免在将数据写入/发送到某个文件(数据库,Excel等)时进行循环。

能告诉我如何处理吗?

我试图获得std::vector<_variant_t>并以某种方式放入另一个_variant_t变量,但不支持直接转换,即使已完成,也没有任何方法或某种包装器来获取此向量进入_variant_t变量。

我不想处理任何循环。

1 个答案:

答案 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);
相关问题