Предположим, у меня есть два класса, полученные из одного базового класса. Я хочу создать экземпляр нового объекта класса в зависимости от ввода командной строки. Я мог бы это сделать:C++ Построить класс по строке
#include <iostream>
#include "DerivedClass1.h"
#include "DerivedClass2.h"
using namespace std;
int main(int argc, char *argv[])
{
if (argv[1] == "DERIVED CLASS 1") {
DerivedClass1 *myClass = new DerivedClass1(argv[2]);
myClass->doSomething();
} else if (argv[1] == "DERIVED CLASS 2") {
DerivedClass2 *myClass = new DerivedClass2(argv[2]);
myClass->doSomething();
}
}
Но мне было интересно, есть ли более элегантный способ сделать это. Я думаю о создании фабрики абстрактного класса, или hard-code отображает имена строк в экземплярах класса. Пара ограничений
1) Мой базовый класс является абстрактным - она содержит чисто виртуальные функции
2) Я могу назвать только параметризованные конструкторы
'argv [1] ==" DE RIVED CLASS 1 "является ошибкой –
Вам придётся создать шаблон фабричного дизайна. Эта ссылка может быть полезной https://sourcemaking.com/design_patterns/factory_method/cpp/1 –
@ M.M что с этим не так? – jjiang