C ++ / WinRT是否提供帮助功能来根据字符串文字构造GUID?

时间:2018-07-13 07:30:03

标签: c++-winrt

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

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

虽然有效(并且甚至可以将Visual Studio中的 Create GUID 工具设置为为您生成初始化程序代码),但它很乏味,难以理解,并且总是让我挠头我介绍了任何字节序问题。

我更想写(使用假设的make_guid函数)

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

我知道C ++ / WinRT可以执行很多constexpr魔术来从完全限定的类型名称中计算GUID,因此大概可以实现零开销的编译时间make_guid函数。浏览documentation winrt / base.h 时,我没有发现任何立即可用的内容。

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

2 个答案:

答案 0 :(得分:4)

否,C ++ / WinRT当前不提供此类帮助器。最初编写constexpr GUID代码时,C ++编译器对constexpr的支持非常脆弱且缓慢。因此,我避免了任何不必要的计算。但是,constexpr支持已大大改善。无论如何,constexpr make_guid函数对于足够高级的编译器是可行的。这是一个示例:

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

答案 1 :(得分:0)

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

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

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