【发布时间】:2021-04-23 15:33:14
【问题描述】:
我正在维护一个使用 Borland C++ 2007 和 AnsiString 值的旧系统(对此我无能为力,系统正在逐步淘汰),我有这个用例:
// declared in the header as class property
AnsiString str; // { Data:NULL }
// used in a class method
Variant v = str;
if (v.vt == VT_NULL || v.vt == VT_EMPTY)
{
// do something
}
但是v.vt == 256,所以条件为假。
设置v时,是否需要勾选str.IsEmpty()并手动设置v.vt = VT_NULL?最好,我想要一个通用方法,其中str 是未知的,并且类型未知;这要求太多了吗?
编辑
有没有办法检查Variant 的类型是否为AnsiString?
【问题讨论】:
-
"Manually" 只是手动的,直到你写了一个函数来完成它。
-
“手动”如“替换成千上万行代码中发生这种情况的数千个实例。
-
如果你可以搜索替换成你可以控制的东西,比如
VT_PRESENT(v),这是一个完全符合你需要的宏和/或函数,你可以对实现细节大惊小怪,而无需更改在测试或改进它时有十亿个东西。如果有人已经硬编码了这样的混乱,那么您无法轻松更改它,所以我不确定您在问什么不需要更改代码的“通用方法”。 -
如果您已将
AnsiString分配给Variant,我看不出Variant怎么可能是空的。它将托管一个AnsiString- 长度可能为 0。 -
这是您正在修复的错误,还是您刚刚添加了
AnsiString案例?听起来您需要对AnsiString的空虚进行更高级别的检查,如果是,则将Variant设置为null。
标签: c++ c++builder vcl