【发布时间】:2010-10-25 01:40:22
【问题描述】:
我需要在一个项目中使用FormatMessage(),但我不喜欢它可怕的界面。有谁知道一个外观可以整理它,同时仍然允许替换参数?
我刚刚阅读了second part of the FastFormat introduction,并正在考虑为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()。
【问题讨论】:
-
您希望能够编写类似...的东西吗?什么?
-
噢!对不起。会暂时解决这个问题...
标签: c++ formatmessage fastformat