将方法添加到单例而不修改其类

时间:2018-10-09 08:12:44

标签: c++ oop singleton

我正在处理具有单例的代码,我不想修改单例的类以添加方法“ void Connect(const int port)”,它将与“单例方法”相同void Connect()”,但不会显示一个对话框询问用户端口号。此方法更新了单身私人会员的地图...,我还需要新方法也更新此地图。

我想到了“ friend”关键字,但是这最后一个必须放在单例类中。

继承不起作用,因为我必须在代码的任何地方(不是我的)使用派生类中的单例。

在这种情况下您会怎么做?

2 个答案:

答案 0 :(得分:2)

C ++不允许像某些其他语言一样将方法添加到现有类中。

如果您想做一些需要访问第三方库私有数据的事情,您确实需要使该库提供一些公开的东西。即使类似void SetConnection(SOCKET sock)之类的东西,您99%的自定义内容也可以分开。写入此类私人成员的任何解决方法均不符合标准。

如果它是protected,则继承可能会起作用,但是在单例的情况下,库将需要为您提供一种提供自己的实例的方法。

假设您在库中获得了一个合适的最小公共方法,那么您可以选择使用自由函数(例如void the_singleton_connect(int port)),也可以使包装单个对象与其他方法一起在自己的代码中使用。

如果您真的想继续访问私有成员,那么请记住,在C ++中,它仅仅是包含声明的头文件。因此,您可以对其进行修改或为该类做出自己的兼容声明。这可能是将private更改为public的宏,您可以编辑文件以将该成员公开,添加friend,添加其他方法,等等。只需将成员变量保留为以便不更改内存布局。

答案 1 :(得分:1)

这个(恕我直言,非常糟糕)的想法实际上可以做到。

1:复制头文件。
2:将函数定义添加到末尾。这不会破坏链接。
3:添加一个实现该文件的.cpp文件。