C++ 向单例添加方法而不修改其类

C++ 向单例添加方法而不修改其类,c++,oop,singleton,C++,Oop,Singleton,我正在使用一个具有单例的代码,我不想修改单例的类来添加方法“void Connect(const int port)”,它将与单例方法“void Connect()”相同,但不会显示一个对话框来询问用户端口号。此方法更新singleton私有成员的映射。。。我需要新方法也更新这张地图 我想到了“friend”关键字,但最后一个必须放在singleton类中 继承不起作用,因为我必须在代码中的任何地方使用派生类的单例(这不是我的) 在这种情况下,您会怎么做?C++不允许像某些其他语言那样将方法添加

我正在使用一个具有单例的代码,我不想修改单例的类来添加方法“void Connect(const int port)”,它将与单例方法“void Connect()”相同,但不会显示一个对话框来询问用户端口号。此方法更新singleton私有成员的映射。。。我需要新方法也更新这张地图

我想到了“friend”关键字,但最后一个必须放在singleton类中

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


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

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

如果您想做一些需要访问第三方库私有数据的事情,那么您确实需要使该库提供一些公共数据。即使它类似于
void SetConnection(SOCKET sock)
,那么99%的自定义内容都可以分开。向这样的私人成员写信的任何变通办法都不符合标准

如果它受到
保护
,继承可能会起作用,但对于单例,库需要为您提供一种方法来提供自己的实例

假设您在库中获得了一个合适的最小公共方法,那么您可以选择使用一个免费函数(例如,
使\u singleton\u connect(int-port)
)无效,或者您可以使用额外的方法在自己的代码中使用包装器singleton

如果你真的想继续访问私有成员,那么记住C++中只是包含声明的头文件。因此,您可以对其进行修改或为该类创建自己的兼容声明。这可能是一个宏,可以将

private
更改为
public
,您可以编辑文件以使该成员成为公共成员,添加
friend
,添加额外的方法,等等。只需保持成员变量完全相同,这样就不会更改内存布局。

实际上可以做到这一点

1:复制头文件。
2:将函数定义添加到末尾。这不会破坏链接。

3:添加一个实现它的.cpp文件。

为了回答这个问题,我们需要知道:“我不想修改singleton的类来添加一个方法”为什么?@YSC,因为我的应用程序基于另一个项目,我不想维护我在这个项目中可以做的更改。你能做一个修改吗?用代码来描述代码比用words@mkaes:你确定这个问题不清楚吗?我们得到了两个解释相同的答案。这就是我所做的,它并不漂亮,但很有效:\