我有2个课程:Bar和Foo。
他们都派生仅 2个接口:IActions和IOtherActions。
所以我们有类似的东西:
class Bar : public IActions ,public IOtherActions
class Foo : public IActions ,public IOtherActions
现在我有一个工厂,我有逻辑来决定是否要使用Foo或Bar。
IActions* getActions();
IOtherActions* getOtherActions();
我的问题是getActions()内部的内容以及getOtherActions()内部的内容是完全相同的逻辑。
IActions* getActions()
{
// not trivial logic to decide which one to use and to create the instance
return instancePointer;
}
正如我所说,getOtherActions()只是getActions()的复制粘贴,返回类型不同。
有没有办法将逻辑保存在一个地方?
答案 0 :(得分:1)
至少乍一看,看起来你可以使用一个模板(你将为每种返回类型显式实例化):
template <class T>
T *getActions() {
// non-trivial logic
return isntancePointer;
}
...然后将其实例化为getActions<IActions *>
和getActions<IOtherActions *>
。
答案 1 :(得分:0)
也许创建一个可以转换为所需接口的中间类型:
public