【发布时间】:2017-12-28 20:33:33
【问题描述】:
是否有可能以某种方式为 WinAPI 函数创建模板?例如,有两个类似的函数(LookupPrivilegeName 和 LookupPrivilegeDisplayName),但参数集不同。我这样调用这两个函数:第一个调用检索所需的缓冲区大小,第二个调用返回所需的值。如果这不可能,是否有任何替代方法可以使代码更紧凑?
【问题讨论】:
-
您可以创建一些元编程来将一组参数类型与一个 winapi 函数相匹配,从而创建一个您自己解决的重载集,但没有什么神奇的解决方案。
-
是的,通常的做法是创建一个方便的包装器,提供更简单的界面、验证输入参数、检查错误代码等。
-
感谢您的回复,但举个例子怎么样?或者你能指出我关于这个主题的有用链接吗?我确实需要了解这一点。
-
这不能自动化。您将必须实现该功能,并将其包装在具有更简单接口的函数中。有关随机示例,请参阅this answer。我建议不要合并通用模式来检索所需的返回缓冲区大小,然后调用以使用宏和/或模板将信息检索到单个实现中。并非所有具有兼容参数和返回值的 API 调用的行为都相同。不要让你的编译器成为产生错误的帮凶。
-
您实际上应该提供一些您希望使其更紧凑的示例代码。由于
LookupPrivilegeName和LookupPrivilegeDisplayName采用不同的参数,因此无论如何您都需要调用它们。