我正在使用小型WinApi库,但这不会影响该问题。我有一个称为Window的类和一个称为WindowImage的类(用于光标和图标)。我希望Window类能够访问WindowImage内部的名为getHandle的函数,但我不希望我的库用户访问此函数。
我曾想过让Window成为WindowImage的朋友,但是在我的研究中,我读到这样做是一种不好的做法。 我还查找了代理类,但是从我的理解看来,这似乎并不是解决我的问题的方法。
答案 0 :(得分:0)
friend
是完成这项工作的工具。
friend
可能是不良做法的唯一原因是,它可能表明存在设计缺陷;也许您根本不应该以这种方式做事?
如果您希望Window
能够调用getHandle
,但没有其他私有功能,您也可以这样做。您将getHandle
设为一个公共函数,但使它接受一个(可能是默认值和未使用的)参数,该参数的类型具有私有构造函数,并使 that 类成为Window的朋友。
class Window;
class WindowImage;
class WindowFriendToken {
WindowFriendToken() == default; // Constructor is private but otherwise normal
friend class WindowImage; // So that other functions in WindowImage can call getHandle
friend class Window; // So functions in Window can call getHandle.
};
class WindowImage {
public:
int getHandle(const WindowFriendToken& ={});
.
.
.
};