如何将这个工厂逻辑保存在一个地方?

时间:2016-01-14 01:43:25

标签: c++ interface factory

我有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()的复制粘贴,返回类型不同。

有没有办法将逻辑保存在一个地方?

2 个答案:

答案 0 :(得分:1)

至少乍一看,看起来你可以使用一个模板(你将为每种返回类型显式实例化):

template <class T>
T *getActions() { 
    // non-trivial logic
    return isntancePointer;
}

...然后将其实例化为getActions<IActions *>getActions<IOtherActions *>

答案 1 :(得分:0)

也许创建一个可以转换为所需接口的中间类型:

public