Direct3D typedef用法

时间:2017-06-09 15:03:14

标签: 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指针表示什么?

2 个答案:

答案 0 :(得分:1)

这主要是由于C如何处理结构类型。在C ++中,事情的工作略有不同,这就是为什么你不再经常看到这种模式的原因。

请注意,DirectX是COM-API,因此使用C语言指定,即使它使用对象和类。

首先提到DXGI_SAMPLE_DESC是标签名称,第二个是typedef的名称。

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

另一方面,只要在C代码中使用类型,省略typedef就会强制你写struct DXGI_SAMPLE_DESC而不是普通DXGI_SAMPLE_DESC

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

答案 1 :(得分:0)

如果你使用C ++,这种typedef对你来说并不重要。在C中,你希望避免写这样的void foo(struct S s);

需要指针允许使用LPDXGI_SAMPLE_DESC,你需要指向这个结构的指针,例如在函数参数中。