Я реализую программу на C ++, которая может программно создавать экземпляры объектов, используя входной файл, который предоставляет имена классов и аргументы для передачи конструкторам.
Классы являются производными от общего базового класса, но их конструкторсигнатура может быть разной.
Они объявлены следующим образом:
class Base { ... }
class Class1 : Base { Class1(int a1, int a2); }
class Class2 : Base { Class2(int a1, int a2, int a3); }
... and so on...
Типы аргументов не обязательно должны быть целыми числами, фактически они могут быть любым встроенным типом или сложным, настраиваемым типом.
Ввод программы может выглядеть следующим образом в форме JSON:
[
{ "Class1": ["arg11", "arg12"] },
{ "Class2": ["arg21", "arg22", "arg23"] },
...and so on...
]
Считывание документов для Boost.Functional / Factory похоже, что это может решить мою проблемуесли бы не тот факт, что в моем приложении сигнатура конструктора меняется (ограничение гетерогенности).Подход Boost.Function / Factory заключается в нормализации сигнатур конструктора, однако это невозможно в моем приложении.
В динамическом языке, таком как Python, это было бы довольно тривиально: obj = klass(*args)
, где klass = Class1
и args = ["arg11, "arg12"]
.
Так, как можно было бы реализовать шаблон фабрики с гетерогенным ограничением в C ++?
Существуют ли другие библиотеки, кроме Boost, которые я пропустил, которые могут помочь?
Можно ли реализовать это так, чтобы единственной зависимостью была стандартная библиотека (т.е. без Boost)?
Кроме того, в случае, когда аргумент конструктора имеет сложный тип, так что он должен быть специальноКак это влияет на сложность проблемы, построенную по JSON-представлению?