c++ - void* 作为未知变量类型

标签 c++ void

我目前正在用 C++ 开发 Sprite 引擎。我有一个带有虚函数 init_api 的抽象类 IEngine。这需要一个空*。

    //  Initialise the engines' API
//  api_params - void* to api parameters for initalisation
//  hWnd - window handle
virtual bool init_api( void* api_params, HWND hWnd ) = 0;

然后我就有了一个 DirectX 实现的引擎类 CEngineDX。然后将 api_params 转换为 D3DPRESENT_PARAMETERS*,因此它可以用于初始化 DirectX。

//  Cast api_params to a D3DPRESENT_PARAMETERS
D3DPRESENT_PARAMETERS* presentParams = NULL;
presentParams = reinterpret_cast< D3DPRESENT_PARAMETERS* >( api_params );

我对这个设置非常满意,但如果您愿意,我想让其他程序员了解这个“解决方案”。

为回复干杯!

卡尔

最佳答案

另一种方法是为每个实现提供一个公共(public) header 和不同的 *.cpp 文件。这样您就可以在项目中仅包含 D3D 或 OGL 文件。 IMO 最好在编译时选择 API,这样就不会链接两个库。

至于void*,我不太喜欢它。我认为您最好定义自己的类型,然后使用包装器结构/类和 typedef 将它们映射到 API 类型。您可以转发声明这些内容,并将实际实现放入 *.cpp 文件中。

此方法的另一个好处是,您无需为不需要的虚拟函数付费,尽管我意识到虚拟调用的成本非常小。

关于c++ - void* 作为未知变量类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/597436/

相关文章:

c - 分配时为空*

c - 当我们将返回类型为 void 的函数调用返回值分配给 int 变量时会发生什么?

c++ - 如何使用 fscanf 提取 html

c++ - 查找字节顺序指针类型转换的代码

c# - 在 void 方法中使用 return 是不好的做法吗?

void - Eiffel 的附加语句中的局部变量有什么意义?

c - 在不使用结果的情况下将结构指针转换为 void 的目的

c++ - 将Qt qml文件转换为位图图像

c++ - C++ 迭代器是否持有对底层对象的引用?

c# - 将服务器 UTC 时间转换为客户端本地时间