【发布时间】:2011-10-07 00:18:50
【问题描述】:
我最近在做一些 Windows Api 编码(仍在做)。我试图找到将 WNDCLASSEX 包装到 C++ 类中的最佳方法,当我有这个疯狂的想法时,WNDCLASSEX 是一个结构,对吗? (即使它是用 c 编写的)并且在 C++ 中,结构被视为类,所以我为什么不将我的 WinCLass 声明为 WNDCLASSEX 的派生,所以我尝试了:
class WinClass : protected WNDCLASSEX
它奏效了!然后我尝试将它与 SDL 结构一起使用,但那些也有效。但是当我从它们派生类时,某些结构(尤其是 SDL 结构)要么不编译,要么导致无法解释的运行时错误。所以我的问题: 是否推荐使用这种 C 结构?它实际上是由专业人士使用的,还是只是一个蹩脚的黑客?我应该将其用于我的包装器或应用程序,还是只会引入无法解释的错误?
【问题讨论】:
-
如果您对 Win32 包装器感兴趣,您可能想看看 existing libraries 是如何设计的。 ATL 和 WTL 可能特别有趣。此外,RSWL 在它还处于起步阶段时看起来很有趣,但我最近没有听到太多关于它的消息(比如它被命名为 RSWL :)
-
在这种情况下,我个人会使用组合而不是继承(即
class WinClass { WNDCLASSEX wcex; };而不是class WinClass : protected WNDCLASSEX {};)。在这种情况下使用组合似乎更明智。