如何最好地将VARIANT_BOOL转换为C++ bool?

sha*_*oth 22 c++ windows com interop boolean

当使用COM时,布尔值将作为VARIANT_BOOL传递,该变量在wtypes.h中声明为short.还有预定义的truefalse值:

#define VARIANT_TRUE ((VARIANT_BOOL)-1)
#define VARIANT_FALSE ((VARIANT_BOOL)0)
Run Code Online (Sandbox Code Playgroud)

哪个是从VARIANT_BOOL转换为C++ bool类型的最佳方法?明显的变体是:

  1. 与VARIANT_FALSE比较

  2. 简单地投奔布尔

其他方式可以很容易地发明.

这是最好的方法 - 最可读,最符合标准,最不容易出现种植错误,最不容易出现移植到64位平台的问题?

180*_*ION 29

比较VARIANT_FALSE.有很多错误的代码错误地将C++ bool true值(强制转换为整数值1)传递给期望的函数VARIANT_BOOL.如果您比较VARIANT_FALSE,您仍将获得正确的预期值.

  • 我很少完全控制客户端代码.我会把每一个电话视为特例 (2认同)

Eur*_*lli 10

我不想担心不同布尔值之间的兼容性,所以我通常会写:

VARIANT_BOOL vb_bool = VARIANT_FALSE;

// ... vb_bool set to something by some other code

bool myBool = (vb_bool == VARIANT_TRUE);
Run Code Online (Sandbox Code Playgroud)

是否有更小的(如"将编译为更简单的x86代码"),有效的方法吗?当然.不值得.这保证有效,所以我可以担心我的业务逻辑.