C ++ / WinRT是否提供从枚举符号到字符串名称的映射?

问题描述 投票:0回答:1

我正在使用C ++ / WinRT。该投影包括许多枚举。我发现自己建立了自己的枚举值表以字符串文字。对于仅具有几个定义值的枚举来说,这并不是什么大问题,但是当它们有很多定义值时,这是一件痛苦的事情。

我真正想要的是某种形式的编译时或运行时反射,它将枚举值转换为表示给定枚举值的编译时名称的字符串表示形式。下面的代码段进行了演示。如何将其自动化?

std::wostream& operator<< (
    std::wostream& wout,
    winrt::Windows::Graphics::DirectX::DirectXPixelFormat e)
{
    // https://docs.microsoft.com/en-us/uwp/api/windows.graphics.directx.directxpixelformat
    using winrt::Windows::Graphics::DirectX::DirectXPixelFormat;
    switch (e) {
    case DirectXPixelFormat::R8G8B8A8Int:
        wout << L"R8G8B8A8Int";
        break;
    case DirectXPixelFormat::B8G8R8A8UIntNormalized:
        wout << L"B8G8R8A8UIntNormalized";
        break;
    default:
        // TODO: Many enums cases are missing.
        //   Find a way to compile-time-generate the string values from enum value.
        wout << L"Unknown (" << std::to_wstring(static_cast<int32_t>(e)) << L")";
    }
    return wout;
}

我可以构建一些解析winrt / *。h文件的东西,以生成包含字符串文字数组的标头,然后#include生成的标头。可能存在用于执行与C ++ / WinRT不相关的此类操作的示例代码。但是,也许C ++ / WinRT在SDK中包含元数据,再结合其中一种C ++ / WinRT命令行工具,对我来说可以轻松做到这一点吗?如果在那儿,我还没找到。

我确实从winrt / Windows.Foundation.Metadata.h中找到了ApiInformation接口,以及“版本自适应代码”的说明。我曾希望ApiInformation后面的OS COM接口可以查询名称以获取枚举值,但是我无法在其中找到答案。https://docs.microsoft.com/en-us/uwp/api/Windows.Foundation.Metadata.ApiInformation

c++-winrt
1个回答
0
投票

如何?

https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/move-to-winrt-from-cx#tostring

namespace winrt
{
    hstring to_hstring(StatusEnum status)
    {
        switch (status)
        {
        case StatusEnum::Success: return L"Success";
        case StatusEnum::AccessDenied: return L"AccessDenied";
        case StatusEnum::DisabledByPolicy: return L"DisabledByPolicy";
        default: return to_hstring(static_cast<int>(status));
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.