我正在使用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
答案 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);
}
);
}
);
});