我需要为一个项目使用FormatMessage(),但我不喜欢它可怕的界面。有谁知道一个外观可以整理它,同时仍然允许替换参数?
我刚刚阅读了FastFormat 介绍的第二部分,并且正在考虑为FormatMessage()编写一个扩展(或者询问FastFormat项目团队是否有一个在工作中),但我很想尽快得到一些东西,所以如果那里还有其他像样的东西,我可能会抓住它。
我想要的是能够编写代码,例如:
HINSTANCE netevent = ::LoadLibrary("netevent.dll");
std::string msg = LookupError(netevent, EVENT_SERVICE_START_FAILED_II,
"child-svr", "parent-svr", "ship happens");
::puts(msg.c_str());
这将给出结果:
The child-svr service depends on the parent-svr service which failed to start be cause of the following error:
ship happens
我构建的当前包装器具有接口:
std::string LookupError(HINSTANCE hinst, DWORD id, ...);
这有两个问题:
- 它不是类型安全的,因为很容易传递任何类型 -
int
,std::string
,void*
-const char*
- 参数的数量很容易与表示错误的格式字符串所需的数量不匹配
鉴于FastFormat在类型安全方面的能力,我想知道是否有办法遵循其处理FormatMessage()的机制。