c++ - Direct3D typedef 用法

标签 c++ pointers struct directx typedef

typedef struct DXGI_SAMPLE_DESC {
         UINT Count;
         UINT Quality;
} DXGI_SAMPLE_DESC, *LPDXGI_SAMPLE_DESC;

那么在上面的多重采样的结构定义中,使用typedef并重复相同结构名称的真正原因是什么。还有 *LPDXGI_SAMPLE_DESC; 为什么是指针? typedef 指针表示什么?

最佳答案

这主要是由于 C 处理结构类型的方式。 C++ 中的工作方式略有不同,这就是您不再经常看到这种模式的原因。

请注意,DirectX 是一个 COM-API因此是根据 C 来指定的,即使它使用对象和类也是如此。

DXGI_SAMPLE_DESC 的第一个是标签名,第二个是 typedef 的名称。

省略标记名的主要缺点是它会阻止类型被前向声明。还有一些technical reasons与 Microsoft 的工具链如何为 COM 接口(interface)生成代码有关,为什么您不想跳过标记名称。

另一方面,无论何时在 C 代码中使用该类型,省略 typedef 都会迫使您编写 struct DXGI_SAMPLE_DESC 而不是普通的 DXGI_SAMPLE_DESC

*LPDXGI_SAMPLE_DESC 是第二个 typedef,它引用 指向 DXGI_SAMPLE_DESC 的指针,而不是普通结构类型本身。这是 standard typedef syntax这在 C++ 中仍然是相同的。

关于c++ - Direct3D typedef 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44461072/

相关文章:

c - 使用指向函数的指针进行数值积分始终返回 0

c - C 上的链表返回 NULL

c++ - 为 wchar* 东西实现我自己的 GNU stricmp、wcsicmp 等

c++ - 更改已运行函数 C++ 中的变量

c - 传递结构指针的问题和 "conflicting types"错误

go - 将结构的字段和不同类型的值写入 Go 中的文件

c - 在自定义结构中管理可动态分配的数组

c++ - 从分层窗口获取 HBITMAP - 不正确的数据

c++ - Memcpy int 到 char 缓冲区 - 作为 sprintf 的替代

c - 从堆栈分配 - C 中的数据对齐问题