我的类具有相同名称的方法,它们执行相同的操作,但它们的实现方式不同。
前:
sudo -u gitlab-psql -i bash /opt/gitlab/embedded/bin/psql --port 5432 -h /var/opt/gitlab/postgresql -d gitlabhq_production
我考虑使用接口,但问题是方法采用不同的参数。然而,模板并不完全适合,因为Item1和Item2以不同的方式运行。换句话说,它们没有通用的方法,因此模板也不完全适合。
这里是否有重构代码的解决方案?
答案 0 :(得分:1)
鉴于您的评论“有......可以扩展的界面样式类”,您可能有兴趣使用模板来表达常见的“界面”:
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...
};
所有它购买它虽然是他们共享的“转换器”界面的表达,一些编译时执行功能签名和名称匹配(例如,如果您更改Converter<>
,您将被提醒更新所有派生类型),以及使用对它们派生的模板实例的指针/引用来处理派生类的能力(对你来说没有任何表面用法)。
答案 1 :(得分:0)
我正在考虑使用模板特化,但是如果它们都使用完全不同的方法,那么它并不值得,尽管它更具可读性。