В C ++ я могу представить тип класса как переменную? - PullRequest
3 голосов
/ 28 октября 2010

Я хотел бы вызвать статический метод из класса, который я определю во время выполнения, но который я знаю, подклассы данного класса. Допустим, у меня есть эти классы

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 private, поэтому я не могу сделать это здесь. Но на самом деле мне не нужен суперобъект, просто тип класса суперкласса. Так есть ли способ представить это как переменную?

РЕДАКТИРОВАТЬ: я знаю, что в этом случае я мог бы вернуть указатель на функцию, но я рассматриваю более сложные примеры, которые могут потребовать вызова более чем одной статической функции.

1 Ответ

9 голосов
/ 28 октября 2010

Возможно, вы захотите взглянуть на Factory Pattern .Если вы разрабатываете архитектуру плагинов, вы можете просто иметь функцию, которая возвращает указатель на желаемую фабрику.Полиморфизм может сделать все остальное за вас.

...