Предположим, что у меня есть типы A
, B
с конструкторами A(int a, double b, std::string c)
, B(double a, int b)
.
Я знаю, как определить функцию, которая создает экземпляры A
или B
через вариативные шаблоны.
Есть ли способ создать функцию/макро/тип, которая для типа T
и ряд векторов возможностей для аргументов конструктора T
предоставляет мне все возможные объекты?
Например, если я использую эту магическую конструкцию для <A, {2, 5, 6}, {2.44, 3.14}, {"yes", "no"}>
, она должна предоставить объекты:
A(2, 2.44, "yes")
A(2, 2.44, "no")
A(2, 3.14, "yes")
...
A(6, 3.14, "no")
То же самое должно работать для B
или любого другого типа без необходимости переделывать магическую конструкцию.
Это очень просто в Python, но я не знаю, возможно ли это на С++.