【问题标题】:In C++, can I represent a class type as a variable?在 C++ 中,我可以将类类型表示为变量吗?
【发布时间】:2011-05-01 21:17:42
【问题描述】:

我想从我将在运行时确定的类中调用静态方法,但我知道它是给定类的子类。所以假设我有这些课程

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();
}

假设我想在运行时(根据文件中的内容)确定接下来是加载 subA 还是 subB。我可以做到这一点的一种方法是使用一个空对象来调用该方法

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

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

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

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

【问题讨论】:

  • 听起来你想要一个抽象工厂或类似的东西

标签: c++ class static-methods private-constructor


【解决方案1】:

您可能想查看Factory Pattern。如果您正在设计一个插件架构,您可以简单地拥有一个返回指向所需工厂的指针的函数。然后,多态性可以为您完成剩下的工作。

【讨论】:

    猜你喜欢
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多