【发布时间】:2019-09-11 11:23:42
【问题描述】:
假设有一个基类和两个派生类:
struct Derive1 : public Base
{
func(TypeA arg)
{
// Common code part 1
specificFunc(arg);
// Common code part 2
}
specificFunc(TypeA arg)
{
// specific implementation
}
};
struct Derive2 : public Base
{
func(TypeB arg)
{
// Common code part 1
specificFunc(arg);
// Common code part 2
}
specificFunc(TypeB arg)
{
// specific implementation
}
};
两个派生类都有一个方法func(),但参数类型不同。 func() 的主体几乎相同,只是在函数中间的某处,它们以不同类型作为参数调用 specificFunc()。和specificFunc()这两个派生类的实现完全不同。
消除Common code part 1 和Common code part 2 重复的好设计是什么?
无法提取Common code part 1 和Common code part 2,因为Func() 内部有控制逻辑。
【问题讨论】:
-
您可以排除
Common code part 1和Common code part 2,例如在普通函数或基类成员函数中。相反的是func()的通用函数(模板),您可以在其中提供specificFunc作为参数。 -
那是否意味着普通的前置/后置代码不依赖于函数参数?
-
@Klaus 是的,没错。但是
specificFunc()的调用是在一个相当复杂的控制逻辑中。
标签: c++