我继承了一些使用类适配器模式的代码,我想将其转换为使用对象适配器模式。
自定义类string
正在适应std::string
,它在MyString
命名空间中。
这是我更改代码之前的代码片段。
// mystring.h
namespace MyString
{
// StringInterface is the new (abstract) interface that the client will use.
// Inheriting the implementation of std::string to build on top of it.
class string : public StringInterface, private std::string
{
...
};
}
// mystring.cpp
namespace MyString
{
...
string& MyString::string::operator=(const string& s) // copy assignment operator
{
if (this != &s) std::string::operator=(s);
return *this;
}
...
}
一旦我删除了私有继承std::string
(我这样做是因为——如果我错了——请纠正我——对象适配器模式使用组合而不是实现的继承),该语句std::string::operator=(s);
会导致错误“调用非静态成员函数没有对象参数“。
所以我不确定如何做到这一点。这是我第一次处理适配器模式(C++ 不是我最擅长的语言);也许我忽略了一些简单的事情。