C++ 适配器模式的实现问题

C++ 适配器模式的实现问题,c++,adapter,C++,Adapter,我有一个问题-在下面的示例中,如何使用适配器模式将第一个接口“转换”为另一个接口?若第二个接口使用附加参数,那个么若适配器从第一个接口继承(只有一个参数),那个么我就不能使用这个参数。我该怎么办 #include <iostream> class IFirstClass { public: virtual void perform(std::string name) = 0; }; class ISecondClass { public: virtual void

我有一个问题-在下面的示例中,如何使用适配器模式将第一个接口“转换”为另一个接口?若第二个接口使用附加参数,那个么若适配器从第一个接口继承(只有一个参数),那个么我就不能使用这个参数。我该怎么办

#include <iostream>

class IFirstClass
{
public:
    virtual void perform(std::string name) = 0;
};

class ISecondClass
{
public:
    virtual void furtherPerform(std::string name, std::string desc) = 0;
};

class FirstClass : public IFirstClass
{
public:
    virtual void perform(std::string name)
    {
        std::cout << "Performing action: " << name << "\n";
    }
};

class SecondClass : public ISecondClass
{
public:
    virtual void furtherPerform(std::string name, std::string desc)
    {
        std::cout << "Performing action: " << name << " with description: " << desc << "\n";
    }
};

class Adapter : public IFirstClass
{
private:
    SecondClass& derived;
public:
    Adapter(SecondClass& derived) : derived{ derived }
    {

    }
    virtual void perform(std::string name)
    {
        derived.furtherPerform(name, ? );
    }
};
int main()
{
    FirstClass a;
    SecondClass b;
    Adapter c(b);
    c.perform("Name", "Description");
}
#包括
类IFirstClass
{
公众:
虚拟空执行(std::string name)=0;
};
第二类
{
公众:
虚拟执行(std::string name,std::string desc)=0;
};
第一类:公共IFirstClass
{
公众:
虚拟空执行(标准::字符串名称)
{

std::cout您正试图在interface1和interface2之间放置一个适配器,以便可以通过适配器使用interface2

您必须决定如何处理需要调整的方法需要比interface2更多的参数这一事实

解决方案可能是始终使用已知值作为参数(空字符串、值化字符串等)

另一个解决方案可能是将该字符串传递到适配器构造函数中

另一种解决方案可能是在每次需要确定该值时询问函数

这真的取决于你需要适应什么