在下面的场景中,除了友元还有其他选择吗?
我有一个代表 UI 窗口的 Window
类。此外,作为单例实现的 WindowManager
类管理我的应用程序中的所有窗口对象(呈现 UI、调度事件等)
WindowManager
将有一个公共(public)接口(interface),仅包含其单例实例化方法和用于呈现 UI 和调度 UI 事件的函数。
我还希望 Window
对象在构造期间向 WindowManager
注册,并在销毁期间注销。 WindowManager::register
和 WindowManager::deregister
方法将是私有(private)的或 protected ,因为我不想要客户端(Window
对象除外) 才能使用此接口(interface)。
在这种情况下,有没有办法避免 Window
和 WindowManager
之间的友元?也许是一种完全不同的方式来实现类似的结果?
最佳答案
是的,但友元是最好的解决方案,因为它是为这种情况而设计的。
另一种方法是使 Window
成为 WindowManager
的成员(注意,这需要新的 C++11 可访问性规则)。或者让它派生自 WindowManager
的成员。或者让它派生自 WindowManager
本身。
您还可以在 Window
中放置一个私有(private)类型,在 Window
中嵌套一个只能由该私有(private)类型构造的键类型,并需要传递一个实例WindowManager
的键类型。这应该适用于 C++11 之前的编译器。
当然,任何方法都可以通过足够的转换来绕过。
关于c++ - 友元的替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7933672/