3

与 C++/CX 不同,C++/WinRT 中似乎没有 GUID 的包装类型。它只是按原样使用普通的 C GUID 结构。因此,构造初始化 GUID 的唯一方法是使用聚合初始化语法,例如

GUID const guid{ 0x00000000, 0x0000, 0x0000,{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } };

虽然这有效(并且 Visual Studio 中的创建 GUID工具甚至可以设置为为您生成初始化程序代码),但它只是乏味,远非可读,并且无论我是否引入任何字节序问题,总是让我摸不着头脑。

我更愿意写(使用假设make_guid函数)

auto const guid{ make_guid("00000000-0000-0000-0000-000000000000") };

我知道 C++/WinRT 在constexpr从完全限定的类型名称计算 GUID 方面做了很多魔术,所以大概可以实现零开销的编译时间make_guid函数。浏览文档winrt/base.h,我没有发现任何立即适用的内容。

C++/WinRT 是否提供帮助函数以在编译时从字符串文字构造 GUID?如果没有,我们/我可以拥有一个吗?

4

2 回答 2

4

不,C++/WinRT 目前不提供这样的帮助程序。最初编写 constexpr GUID 代码时,C++ 编译器对 constexpr 的支持相当脆弱和缓慢。因此,我避免了任何不必要的计算。然而,对 constexpr 的支持已经有了很大的改进。无论如何,一个 constexpr make_guid 函数可以使用足够先进的编译器来实现。这是一个例子:

https://gist.github.com/kennykerr/6c948882de395c25b3218ad8d4daf362

于 2018-07-16T18:15:12.083 回答
0

肯尼的回答非常有帮助。我只是在 Windows 10 SDK 中添加了一些 GUID 更新。

从 Windows 10 版本 1809 开始,GUID 已被投影为“winrt::guid”。它现在是 C++/WinRT 中的基本类型。这是Docs 上的发行说明

此外,还有一个从空构造 GUID 的助手。请参考以下链接: https ://docs.microsoft.com/en-us/uwp/api/windows.foundation.guidhelper.createnewguid?view=winrt-19041

于 2021-04-08T14:35:55.023 回答