Rob*_*uld 3 c++ windows api-design
我有一些代码在C++中有一个动态类系统,它有一个名为GetClassName()的成员,一个人们可以想象的无害的名字.然而,当包含在一个带有Windows标题的大型项目中时,所有地狱都会崩溃.显然,Windows使用#define GetClassName(GetClassNameA或GetClassNameW)搞砸了所有东西,我的虚拟调用树变得一团糟,让我在黑暗中愚蠢的编译器调试中失去了一天,试图弄清楚出了什么问题.
所以除了我诅咒微软使用这样一个非常容易冲突的#define名称这一点之外(我的意思是有人应该诚实地为此拍摄!)我要求3个目的.
ClassGetName()#undef GetClassName#include他们.我会重命名该方法。
当然可以说
#include <windows.h>
#undef GetClassName
Run Code Online (Sandbox Code Playgroud)
但它并不干净,代码的用户在调用 win32 函数时应该记住编写::GetClassNameW。
可以在他的类中提供 GetClassNameA 和 GetClassNameW 方法,但这非常丑陋。
我看到两种方法:延长或缩短名称:)
1) 为子系统中的所有函数添加前缀 fe TI_(用于类型信息):
TI_GetClassName()
TI_GetBaseClass()
TI_IsDerivedFromClass()
etc
Run Code Online (Sandbox Code Playgroud)
2)或者将它们放入一些IClass接口中
interface IClass {
GetName();
GetBase();
IsDerivedFrom();
etc
Run Code Online (Sandbox Code Playgroud)
并从单个方法返回该接口,
以便 GetClassName() 变为
GetClass()->GetName()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3463 次 |
| 最近记录: |