Я тоже заинтересован в том, чтобы создать что-то, что легко промыть и повторить комбинаторно. Я знаком с подходом с одометром, если есть, где у вас есть показатели ходьбы. Что-то в этом роде. Суть в том, чтобы легко построить кортежи по произвольному набору несвязанных векторов.
Это не совсем отвечает на ваш вопрос, я не думаю, но вы могли бы построить статические / расчетные комбинации времени, используя вариативное производство, такое как следующее, где T1-3 - произвольные типы:
template<class V>
void push_back_tupled_combos(V& v) {
// Variadic no-args no-op
}
template<class V, typename A, typename B, typename C, typename... Args>
void push_back_tupled_combos(V& v, A a, B b, C c, Args... args) {
v.push_back({ a, b, c });
push_back_tupled_combos(v, args...);
}
template<class V, typename... Args>
void push_back_tupled_combos(V& v, Args... args) {
}
Предположим, у вас есть вектор, который выглядит примерно так:
typedef vector<tuple<T1, T2, T3>> CombosVector;
CombosVector combos;
push_back_tupled_combos(combos
, 1, 2, 3
, 4, 5, 6
, 7, 8, 9, ...);
Как я уже сказал, это время проектирования. Он не создает кортежи в диапазоне векторов выполнения. Это обратная сторона. Положительным моментом, однако, является то, что вы получаете время компиляции ваших векторных кортежей.
Опять же, не совсем то, за чем вы или даже я, но, возможно, это поможет получить положительную обратную связь.