当使用外部库或API时,我注意到属于该库或API的每个函数或数据结构的名称都有一些内容,它们公开了我们正在使用的API或库。例如,已经命名来自Direct3D和SDL的D3DXVECTOR3或SDL_Surface以公开它们属于哪个API。
在构建我们自己的应用程序时,我不想透露我使用过哪些API,所以通过#define指令将这些API结构的名称更改为一些更通用的名称是一种好习惯吗?这是一种实践和使用的抽象形式吗?是否有更好的方法来进行这种抽象?
答案 0 :(得分:0)
在OO世界中,进行这种抽象的最佳方式是the adapter pattern。
由于您提到#define
,我假设您使用的是C或C ++。在这两种情况下,如果需要,您仍然可以使用此模式。只需使用带有抽象基类的类作为接口。由于虚函数调用,这将增加一小部分开销。您也可以考虑template inheritance来绕过此问题。
无论哪种方式,我都会尽量避免使用预处理器,因为它可以快速将您的代码转换成美味的意大利菜。