在C++中,我可以将类类型表示为变量吗?

Mar*_*arc 3 c++ static-methods class private-constructor

我想从一个我将在运行时确定的类调用静态方法,但我知道它是给定类的子类.所以我要说我有这些课程

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();
}
Run Code Online (Sandbox Code Playgroud)

让我们说我想在运行时(根据文件中的内容)确定是否要加载subA或subB.我可以这样做的一种方法是使用一个空对象来调用该方法

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

super *newObj = getLoadType(is).loadMe(is);
Run Code Online (Sandbox Code Playgroud)

但是我把subB的无参数构造函数设为私有,所以我不能在这里做.但我实际上并不需要超级对象,只需要超类的类类型.那么有没有办法将其表示为变量?

编辑:我知道在这种情况下,我可以返回一个函数指针,但我正在考虑更复杂的例子,可能需要调用多个静态函数.

dor*_*ron 9

您可能想要查看工厂模式.如果您正在设计插件架构,您可以简单地使用一个函数返回指向所需工厂的指针.然后,多态性可以为你做其余的事情.

  • +1:工厂模式可能是最好的选择. (2认同)