我有2节课:Bar和Foo。

它们都只派生两个接口: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()的复制粘贴,返回类型不同。

有什么办法可以将逻辑放在一个地方吗?

最佳答案

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

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


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

08-16 07:22