Visual c++ 在C+中比较两种GUI是否相等+; 我正在寻找比较C++中两个GUID的最简单方法。当然有一个预定义的函数 解决方案需要使用Visual C++ 2010。< /P>

Visual c++ 在C+中比较两种GUI是否相等+; 我正在寻找比较C++中两个GUID的最简单方法。当然有一个预定义的函数 解决方案需要使用Visual C++ 2010。< /P>,visual-c++,guid,equality,Visual C++,Guid,Equality,更新: 我指的是Guiddef.h中定义的GUID: typedef struct _GUID { unsigned long Data1; unsigned short Data2; unsigned short Data3; unsigned char Data4[ 8 ]; } GUID; ==运算符是否未重载以执行此操作?或者使用。也许你想要(在幕后使用memcmp)或者仅仅使用操作符==(为你调用IsEqualGUID)。到2020年的FFWD和2

更新:

我指的是Guiddef.h中定义的GUID:

typedef struct _GUID {
    unsigned long  Data1;
    unsigned short Data2;
    unsigned short Data3;
    unsigned char  Data4[ 8 ];
} GUID;

==运算符是否未重载以执行此操作?或者使用。

也许你想要(在幕后使用memcmp)或者仅仅使用
操作符==
(为你调用IsEqualGUID)。

到2020年的FFWD和2019年的Visual Studio世界。假设OP已经升级到这一级别,并且至少享受C++17

提供的GUID结构为“规范”形状:

两个GUID之间最快的比较是

constexpr inline bool 
equal_guid (const GUID &  rguid1, const GUID &  rguid2)
noexcept
{
   return 
   rguid1.Data1 == rguid2.Data1 &&
   rguid1.Data2 == rguid2.Data2 &&
   rguid1.Data3 == rguid2.Data3 &&
   rguid1.Data4[0] == rguid2.Data4[0] &&
   rguid1.Data4[1] == rguid2.Data4[1] &&
   rguid1.Data4[2] == rguid2.Data4[2] &&
   rguid1.Data4[3] == rguid2.Data4[3] &&
   rguid1.Data4[4] == rguid2.Data4[4] &&
   rguid1.Data4[5] == rguid2.Data4[5] &&
   rguid1.Data4[6] == rguid2.Data4[6] &&
   rguid1.Data4[7] == rguid2.Data4[7] ;
}
用法

constexpr GUID  dbjlog =
    {0xce863f32,0x799c,0x11d2,{0x94,0xef,0x00,0x00,0x00,0x00,0x00,0x00}};
constexpr GUID  thelog =
    {0xce863f40,0x799c,0x11d2,{0x94,0xef,0x00,0x00,0x00,0x00,0x00,0x00}};

int main(int , char **) {

     static_assert(   equal_guid( dbjlog, dbjlog) ) ;
     static_assert( ! equal_guid( dbjlog, thelog) ) ;

    return 42; // mandatory 
}
我认为这是比较GuID的

最简单和最快的C++解决方案。
请参阅C++11。其中还提供了基于memcmp的函数,但这显然不是编译时的事情。

你看过相关的吗:-我在那里发布了我的答案,因为srgloureiroth OP特别要求使用Visual Studio 2010编译的解决方案
constexpr
是在C++11中引入的。Visual Studio 2010不支持C++11。
constexpr GUID  dbjlog =
    {0xce863f32,0x799c,0x11d2,{0x94,0xef,0x00,0x00,0x00,0x00,0x00,0x00}};
constexpr GUID  thelog =
    {0xce863f40,0x799c,0x11d2,{0x94,0xef,0x00,0x00,0x00,0x00,0x00,0x00}};

int main(int , char **) {

     static_assert(   equal_guid( dbjlog, dbjlog) ) ;
     static_assert( ! equal_guid( dbjlog, thelog) ) ;

    return 42; // mandatory 
}