2010-10-28 126 views
3

我想从一个类中调用一个静态方法,我将在运行时确定这个类,但是我知道它是给定类的子类。所以我们可以说我有这些类在C++中,我可以将类类型表示为变量吗?

class super { 
    public: 
    super(); 
    static super *loadMe (ifstream &is); 
} 

class subA : public super { 
    public: 
    subA(); 
    static super *loadMe (ifstream &is); 
} 

class subB : public super { 
    public: 
    static super *loadMe (ifstream &is); 
    private: 
    subB(); 
} 

而且我们说,我想在运行时确定(基于文件中的什么)是否加载苏巴或subB的未来。我能做到这一点的方法之一是使用空对象调用的方法

super getLoadType (ifstream &is) { if(complicatedFunctionOfIs(is)) return subA(); return subB()} 

super *newObj = getLoadType(is).loadMe(is); 

,但我做了subB的私人的无参数的构造函数,所以我不能在这里这样做。但是我并不需要一个超级对象,而只需要一个超级子类的类型。那么有没有办法将它表示为一个变量?编辑:我知道在这种情况下,我可以返回一个函数指针,但我正在考虑更复杂的例子,可能涉及需要调用多个静态函数。

+2

听起来像你想抽象工厂或类似的东西 – 2010-10-28 13:08:52

回答

9

你可能想看看Factory Pattern。如果你正在设计一个插件架构,你可以简单地有一个函数返回一个指向所需工厂的指针。多态可以为你做剩下的事。

+2

+1:工厂模式可能是这里最好的选择。 – Puppy 2010-10-28 13:14:08

相关问题