c++ - 如果其中一个具体的构建器需要额外的参数,如何为构建器模式中的构建器创建统一的接口?
问题描述
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.
如果我没有清楚地表达这个问题,我深表歉意。
解决方案
添加
using Builder::Build;
到派生类的声明。这会将此符号导入派生类,并使其和派生类方法的同名可用于重载决议。IE
using Builder::Build;
void Build(int a);
我忽略了你无论如何都不能构造派生类的事实,因为它无法从基类实现这个纯虚函数。
推荐阅读
- java - Android - Paytm 支付网关集成问题:com.paytm.pg.AppTest 类型已定义多次
- spring-boot - Spring Boot RestTemplate WebClient - 响应正文 JSON 空
- javascript - 如何使用 CSS 创建运行文本(选取框)
- java - Java 中的枚举 VS C# 中的枚举
- .net - 替换 Tizen TV 上的 .NET WebView
- php - 如何将n个员工出勤数据存储在另一个表中作为任何其他列名
- api - 如何将搜索结果与数据库集成
- python - 让 python 与多个 android 模拟器交互
- javascript - Ajax 填充的选择元素在重新调整 json 的 ajax 数据库插入调用上相互冲突
- javascript - 使用 VSCode 和 Pupeteer 在 REPL 循环中评估 promise