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

时间:2019-01-29 14:22:33

标签: c++-winrt

我正在使用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

1 个答案:

答案 0 :(得分:0)

怎么样

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

router.delete("/:id", async (req, res) => {
  conn.query(
    "Delete FROM assignedcourses WHERE CourseID = ?",
    req.params.id,
    async (err, results) => {
      if (err) throw err;
      conn.query(
        "Delete FROM courses WHERE CourseID = ?",
        req.params.id,
        async (err, results) => {
          res.send(results);
        }
      );
    }
  );
});