在C++中,我可以将类类型表示为变量吗?
问题描述:
我想从一个类中调用一个静态方法,我将在运行时确定这个类,但是我知道它是给定类的子类。所以我们可以说我有这些类在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的私人的无参数的构造函数,所以我不能在这里这样做。但是我并不需要一个超级对象,而只需要一个超级子类的类型。那么有没有办法将它表示为一个变量?编辑:我知道在这种情况下,我可以返回一个函数指针,但我正在考虑更复杂的例子,可能涉及需要调用多个静态函数。
答
你可能想看看Factory Pattern。如果你正在设计一个插件架构,你可以简单地有一个函数返回一个指向所需工厂的指针。多态可以为你做剩下的事。
+2
+1:工厂模式可能是这里最好的选择。 – Puppy 2010-10-28 13:14:08
听起来像你想抽象工厂或类似的东西 – 2010-10-28 13:08:52