问题标签 [variant]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1383 浏览

c++ - 如何在 XLOPER 和 VARIANT 之间编组?

我正在开发一个与 COM 对象通信的 Excel 插件 (XLL)。所以,我必须在 XLOPER 和 VARIANT 之间进行编组。我已经完成了大部分工作,但数组绝对是一种痛苦。我需要支持一维和二维数组。

我想有人以前已经不得不处理这个问题了。简化处理 VARIANT、SAFEARRAY 和 XLOPER(以及 XLOPER12)的最佳方法是什么?

0 投票
2 回答
13185 浏览

c++ - boost::variant 转换为类型

我有来自 boost lib 的以下变体:

现在我想从 a 中声明为 ' value'的变量中获取一个值struct node,所以我认为我可以使用泛型并这样调用函数:find_attribute<long>(attribute);,但是编译器说它不能从变量转换为 long 或我给它的任何其他类型. 我究竟做错了什么?

0 投票
1 回答
4243 浏览

c++ - 升压变体比较器

我需要比较两个类型的变量,boost::variant并且我想比较变量内的值是否相等。

实现这一点的最佳方法是什么?

我的变体如下所示:

0 投票
1 回答
3012 浏览

php - 如何从 PHP 中的 COM 对象返回的多维变量数组中读取?

我正在使用一个返回多维 VARIANT 数组 (vt_array) 的 COM 对象,并且我正在尝试从数组中读取值。

当我使用print_r($mdArray)它时显示variant Object. (variant_get_type($mdArray)返回8204。)

我尝试使用foreach ($mdArray as $oneArray),但收到消息:

警告:Loader::getfields() [loader.getfields]:只能处理 C:\Inetpub\wwwroot\root\script\fileloader.php 中第 135 行的一维变量数组(此数组有 2 个)致命错误:未捕获的异常在 C:\Inetpub\wwwroot\root\script\fileloader.php:135 中带有消息“类型变体的对象未创建迭代器”的“异常”堆栈跟踪:#0 C:\Inetpub\wwwroot\root\script\fileloader .php(135): Loader::getfields() #1 C:\Inetpub\wwwroot\root\testloader.php(21): Loader->getfields() #2 {main} 在 C:\Inetpub\wwwroot\第 135 行的 root\script\fileloader.php

(foreach 循环在第 135 行)

我能得到的关于数组的唯一信息是使用count($mdArray)which returns 8

如果这里的任何人有任何阅读多维 VARIANT 数组的经验,请告诉我如何做到这一点。

0 投票
1 回答
1247 浏览

visual-c++ - 如何从 VC++ 将变量数组传递给 VB Com 组件

我正在从 VC++ 客户端调用 VB COM 组件函数,

此函数需要 VARIANT 数组,

HRESULT setLabels (/[in,out]/VARIANT * 标签)

我尝试通过以下方式传递变量数组,

在这两种方式中,VB 组件都无法按预期工作。由于我没有 VB 组件的来源,我不知道里面发生了什么,当我从 VB 客户端访问时,同一个组件工作正常。

如何将变量数组从 VC++ 传递给 VB 组件?

0 投票
1 回答
2114 浏览

c++ - boost::variant 和 void* 指针

我需要一个包含任何用户定义类的实例的变体类型。所以我使用 void*:

我用地图创建了一个包装类:

使用示例:

这个 void* 在变体类中有两个问题:

  1. 使用指向动态分配内存的指针复制属性是危险的并且容易出错。
  2. 用户可以将 void* 静态转换为 WrongClass*,而不是 MyClass*。它编译,但结果是不可预测的。

可能的解决方案:

  1. 使用 boost::shared_ptr< void* >。
  2. 记住所有 void* 值(添加时)的 typeid std::map<void*, typeid> typeid_map。当用户请求 void* 值,将其转换为任何 TClass* 时,让我们评估一个断言:assert(typeid_from_typeid_map == typeid(TClass*))

问题
1. 是否有其他解决方案来保存任何用户定义类的值?
2. 可能你会为提到的问题推荐更好的解决方案并指出其他一些问题?

0 投票
1 回答
831 浏览

delphi - 使 VarToDoubleAsString 使用 Delphi 设置(不是操作系统设置)

当将包含字符串值的 Variant 分配给浮点变量时,Delphi 调用 VarToDoubleAsString 进行转换,然后使用 OS 设置的十进制和千位分隔符(通过 VarR8FromStr)。如果必须更改SysUtils.DecimalSeparator并且SysUtils.ThousandSeparator. 例如运行以下程序:

第一个测试工作正常,第二个测试失败。

有没有办法让 Variant 转换使用SysUtils.DecimalSeparatorand SysUtils.ThousandSeparator

0 投票
2 回答
154 浏览

java - 二进制印章:if list[middle] == key case

我正在为我的考试修改算法,我试图解决这个练习,但我想不出一个解决方案。

这是伪代码。

因此,现在的代码不满足后置条件,因为对于某些输入(例如 x = 1 和 a={0,1,1,1,1}),第 14 行返回的值不满足第 4 行的后置条件。练习要求:“替换第 14 行的“return middle;”。通过 while 循环并返回代码,使其满足后置条件。包括足够强的变体和不变式以暗示返回时的后置条件. 提示:确保你包括说明没有改变的内容。

我一直无法找到解决方案。谁能帮我?

提前谢谢,VJ

编辑:好的,谢谢你们俩的帮助。

} 返回中间;

我选择了中间的变体。并且不变量是:

0x

你认为这是正确的吗?

0 投票
2 回答
265 浏览

c++ - 返回特定类型的模板

我有一个模板函数,我希望返回 T 的类型或变体。我尝试执行以下操作,但是编译器抱怨它无法将“变体”转换为 int(我将这个函数与 T=int 一起使用)。

我应该如何实现这一点,以便我可以只返回变体或变体中包含的类型。

它是从向量结构中得到的。

0 投票
1 回答
432 浏览

python - 我在哪里可以找到 VARIANT 类型代码?(vboxapi问题)

我正在vboxapi通过 COM 使用,我注意到一个错误......IMedium.CreateBaseStorage按照他们的定义调用它会产生一个错误,“无效的 VARIANT 类型:20”。我将 20 的值更改为 19,这是另一个(整数)参数的 VARIANT:

但是,这不起作用,因为该值是硬盘驱动器的大小(以字节为单位),这意味着它最多可以是 4 GB,而我需要制作 80、120、250 GB 的硬盘驱动器等。

那么 8 字节整数的 VARIANT 类型是什么?我假设它是VT_I8,但数值是多少?为了将来参考,我在哪里可以找到它们?

如果值为 20,那么我就完蛋了,因为那是失败的值……在这种情况下,还有其他人有什么建议吗?