尽管这种情况可能在任何地方出现,但在 Windows 上使用 C++ 编程。这是我的问题的简化版本,以使问题易于管理,因此不要太关注细节:)
我有一个class Window
包含 WindowsHWND
数据项的类。我想完全封装它,HWND
以便类的用户必须通过类才能在该窗口上执行任何操作,因此它存储在私有成员变量中。我不想为它提供任何公共“getter”,因为这会破坏允许用户绕过我的课程的封装。
现在我想创建一个类class Direct3d11
来封装一些directx api。为了创建这个类的一个实例,它需要一个窗口的 HWND,所以我Window
在它的构造函数中传递了一个对象。
class Direct3D11
{
public:
Direct3D11(const Window& window);
};
在构造函数内部,它可以访问窗口对象,但是它需要包含在其中的 HWND 才能物理地创建 Direct3D11 类将管理的窗口对象,但它无法获取该信息。
我可以添加一个私有 getter 函数来获取 HWND 到 Window 类,然后使 Direct3D11 类成为 Window 的朋友类,以便它调用该函数。
然而,这似乎不是很优雅,尤其是因为 Window 类根本不需要知道关于 Direct3D11 类的任何事情。
我是否错过了实现这一目标的更好方法?朋友类没有吸引力,拥有公共 getter 函数也没有太大吸引力。