首页 > 解决方案 > 如果其中一个具体的构建器需要额外的参数,如何为构建器模式中的构建器创建统一的接口?

问题描述

class Builder 
{
  public:
   virtual void Build(int a) = 0;
};

class ConcreteBuilder1 : public Builder
{
  public:
    void Build(int a);
};

class ConcreteBuilder2 : public Builder
{
  public:
    void Build(int a. struct A* a);
};

所以我的问题是如何设计 Build() 方法来获取两个参数(int,struct* A)。但是具有相同的构建器界面?

以便,

int x;
struct A* y;
Builder concrteBuilder1 = new ConcreteBuilder1(); 
concrteBuilder1 ->Build() // //  Here I am  forced to pass struct A* a eventhough not needed for concerte builder1 . And I am also forced to forced to change Builder interface too.

如果我没有清楚地表达这个问题,我深表歉意。

标签: c++inheritancebuildervirtual-functions

解决方案


添加

using Builder::Build;

到派生类的声明。这会将此符号导入派生类,并使其和派生类方法的同名可用于重载决议。IE

using Builder::Build;

void Build(int a);

我忽略了你无论如何都不能构造派生类的事实,因为它无法从基类实现这个纯虚函数。


推荐阅读