C++11 如何重构具有类似功能的两个类?
我有一些具有相同名称的方法的类,它们做相同的事情,但它们的实现方式不同 例: 我考虑过使用接口,但问题是这些方法采用不同的参数。但是模板也不完全适合,因为Item1和Item2的操作方式不同。换句话说,它们没有通用的方法,所以模板也不完全适合C++11 如何重构具有类似功能的两个类?,c++11,design-patterns,C++11,Design Patterns,我有一些具有相同名称的方法的类,它们做相同的事情,但它们的实现方式不同 例: 我考虑过使用接口,但问题是这些方法采用不同的参数。但是模板也不完全适合,因为Item1和Item2的操作方式不同。换句话说,它们没有通用的方法,所以模板也不完全适合 这里有重构代码的解决方案吗?我在考虑使用模板专门化,但是如果它们都使用完全不同的方法,那就不值得了,尽管这样会更具可读性。给出您的评论“如何…拥有一个可扩展的接口样式类”,您可能有兴趣使用模板来表达常见的“接口”: 模板 结构转换器 { 虚空图(项目)=0
这里有重构代码的解决方案吗?我在考虑使用模板专门化,但是如果它们都使用完全不同的方法,那就不值得了,尽管这样会更具可读性。给出您的评论“如何…拥有一个可扩展的接口样式类”,您可能有兴趣使用模板来表达常见的“接口”:
模板
结构转换器
{
虚空图(项目)=0;
虚空转换(项)=0;
虚空转换(项)=0;
};
类converterA:公共转换器{
无效映射(Item1 Item1)最终{…}
无效转换(项1项)最终{…}
无效翻译(项1项)最终{…}
};
类转换器B:公共转换器{
…同样的事情。。。
};
不过,它给您带来的只是它们共享的“Converter”接口的一个表达式,一些编译时强制执行,使函数签名和名称与之匹配(例如,如果您更改
Converter
,则会提醒您更新所有派生类型),以及使用指向派生类的模板实例化的指针/引用来处理派生类的能力(这对您来说没有任何表面上的用途).在这种情况下,通过重构您想获得什么?我只是想知道是否有一种方法可以压缩代码,或者有一个接口样式的类可以扩展,因为这两个类具有相似的功能。
class converterA {
map(Item1 item1) {
// Implementation details.
}
convert(Item1 item1) {
// Implementation details.
}
translate(Item1 item1) {
// Implementation details.
}
}
class converterB {
map(Item2 item2) {
// Implementation details.
}
convert(Item2 item2) {
// Implementation details.
}
translate(Item2 item2) {
// Implementation details.
}
}
template <typename Item>
struct Converter
{
virtual void map(Item) = 0;
virtual void convert(Item) = 0;
virtual void translate(Item) = 0;
};
class converterA : public Converter<Item1> {
void map(Item1 item1) final { ... }
void convert(Item1 item) final { ... }
void translate(Item1 item) final { ... }
};
class converterB : public Converter<Item2> {
...same kind of thing...
};