C 结构实现派生接口
C++ struct implement derived interface
在实验C 中的访问者模式时,我就实现派生接口遇到了一个愚蠢的问题。我怀疑我不知道如何正确提出问题,因为我还没有找到其他地方的解决方案。
我有以下基础结构:
struct Visitor {
virtual void visit(const Resources) = 0;
virtual void visit(const Population) = 0;
};
我希望声明几个访客的具体实现以及一些额外的功能。这就是我希望我的声明看起来像:
struct EndVisitor : public Visitor{
virtual bool hasEnded();
};
struct SetupVisitor : public Visitor{
};
struct ScoreVisitor : public Visitor{
virtual unsigned int getScore();
};
定义时,例如得分为Visitor,IDE和编译器识别ScoreVisitor中的额外功能声明:
unsigned int ScoreVisitor::getScore() {
return total;
}
但是,编译器或IDE(Funtion 'visit' not declared in class 'ScoreVisitor'
(未识别实施访问者功能:
void ScoreVisitor::visit(const Resources resources) {
total += resources.score;
}
void ScoreVisitor::visit(const Population population) {
total += population.score;
}
如果我声明了重复访问者函数的ScoreVisitor,则代码会编译,但是在所有访问者的专用声明中,我都希望避免使用大量复制的代码。这不是我希望我的声明看起来像:
struct ScoreVisitor : public Visitor{
virtual void visit(const Resources);
virtual void visit(const Population);
virtual unsigned int getScore();
};
如何声明访客的专业版本,而不必复制访客已经声明的所有功能?
无法避免必须声明您从派生类中的基类覆盖的方法。这就是语言的方式。通常,人们将功能分组为某种形式的继承层次结构以暴露共同的功能。
注意几个与语法相关的事项,virtual
对于派生类是可选的(默认情况下,具有相似签名的函数是虚拟的(,因为C 11,有些人已经使用override
(我也属于此类别(由于在编译时会捕获 - 在派生类A方法中的任何情况下都会虚拟,但在基类中,它并未被声明为此。
我敢肯定以上是一个例子,但是至关重要的是,您不要忘记基类中的虚拟驱动器!
它不是理想的,但是您可以使用从访客继承并从中获得其他类的子类来进行:
struct Visitor {
virtual void visit(const int) = 0;
};
struct VisitorImplementor : public Visitor
{
virtual void visit(const int) override { /* implement */}
};
struct EndVisitor : public VisitorImplementor {
virtual bool hasEnded() { return true; }
};
现在您可以创建Endvisitor的实例并在其上访问
EndVisitor v;
v.visit(10);
相关文章:
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- 如何在基类中定义静态接口,并确保该接口必须在派生类中实现
- C 结构实现派生接口
- 如何从接口获得派生类
- 接口会议派生的类功能而无需铸造
- 共享接口类和 C++ 派生类中的默认参数值
- 在派生类接口中隐藏基类的特定函数
- C++ 从嵌套类的接口派生
- C#派生的接口在C++中无法正常工作
- 定义多个派生接口成员
- 从接口派生的模板 - 多态性停止工作
- 具有显式派生方法的C++接口
- 从Const引用接口到派生类的转换
- 如何创建从另一个派生的两个ATL接口
- CLR 探查器:COM 样式的强制转换和从派生接口调用函数
- 具有扩展接口的派生类的集合.如何在没有动态强制转换的情况下访问派生接口
- c++:通过基类接口构造派生对象
- IUknown 派生接口上的虚拟析构函数
- 将从接口派生的类的实例添加到接口指针数组中
- 描述从多个接口派生的对象