从多个头文件中的接口声明重写函数时如何避免重复代码?
How to avoid duplicate code when declaring overridden functions from interface in multiple header files?
我有多个 class 继承自一个接口。派生的 classes 的头文件几乎相等,因为每个都覆盖了所有纯虚函数:
struct IBase {
virtual void fooA() = 0;
virtual void fooB() = 0;
};
struct Derived1 : IBase {
void fooA() override;
void fooB() override;
};
struct Derived2 : IBase {
void fooA() override;
void fooB() override;
};
void Derived1::fooA() {
// implA1
}
void Derived1::fooB() {
// implB1
}
void Derived2::fooA() {
// implA2
}
void Derived2::fooB() {
// implB2
}
我能否以某种方式避免为每个派生的 class 复制粘贴 void fooA() override; void fooB() override;
?
不可能避免为每个派生的 class 复制粘贴 void fooA() override; void fooB() override;
,假设它们的实现确实不同(如您的评论 // implA1
和 // implA2
), 不求助于宏.
注意:如果Derived1::fooA
和Derived2::fooA
的实现相同,则可以避免重复。
如果 all 派生的 classes always 需要在之前、之后或之后调用的公共代码块他们自己的专业化的一部分(或者甚至只是通常),那么你可以提供它作为基础class中纯虚拟的实现(是的,纯虚拟可以有一个实现)。那么大家还是要实现功能(还是纯的),不过可以调用基础的class函数,普通的东东
我有多个 class 继承自一个接口。派生的 classes 的头文件几乎相等,因为每个都覆盖了所有纯虚函数:
struct IBase {
virtual void fooA() = 0;
virtual void fooB() = 0;
};
struct Derived1 : IBase {
void fooA() override;
void fooB() override;
};
struct Derived2 : IBase {
void fooA() override;
void fooB() override;
};
void Derived1::fooA() {
// implA1
}
void Derived1::fooB() {
// implB1
}
void Derived2::fooA() {
// implA2
}
void Derived2::fooB() {
// implB2
}
我能否以某种方式避免为每个派生的 class 复制粘贴 void fooA() override; void fooB() override;
?
不可能避免为每个派生的 class 复制粘贴 void fooA() override; void fooB() override;
,假设它们的实现确实不同(如您的评论 // implA1
和 // implA2
), 不求助于宏.
注意:如果Derived1::fooA
和Derived2::fooA
的实现相同,则可以避免重复。
如果 all 派生的 classes always 需要在之前、之后或之后调用的公共代码块他们自己的专业化的一部分(或者甚至只是通常),那么你可以提供它作为基础class中纯虚拟的实现(是的,纯虚拟可以有一个实现)。那么大家还是要实现功能(还是纯的),不过可以调用基础的class函数,普通的东东