Как создать кортеж из N целых чисел во время выполнения

Мне нужен универсальный способ создать кортеж из N целых чисел во время выполнения, где N — это размер вектора (не более 20). Например:

int main() {
vector<int> vec;
vec.push_back(31);
vec.push_back(24);

auto x = MakeTuple(vec.size());    // x should have the type tuple<int,int>

return 0;
}

РЕДАКТИРОВАТЬ:
Просто чтобы уточнить … Я не могу придерживаться векторов, потому что мне нужны типы кортежей для создания объектов шаблонных классов графа потока TBB с использованием лямбда-выражений.

РЕДАКТИРОВАТЬ 2: Очевидно, мне нужно объяснить проблему. У меня есть неструктурированные сетки, которые я динамически делю на X разделов. Каждый из этих разделов связан с N другими разделами, где N> 1. Эти соединения определяют зависимости между разделами, которые мне нужно использовать для построения потокового графа. Поскольку структура сетки известна только во время выполнения, то же самое относится и к структуре зависимости. Таким образом, мне нужен способ создания определенных узлов графа (классов TBB), которые принимают кортежи, которые представляют входные зависимости в качестве параметров шаблона.

Вот пример того, как создать функциональный узел TBB, который имеет две входные зависимости:

using namespace tbb:flow;

function_node<tuple<int,int> > *f =
new function_node<tuple<int,int>>(g, 1, [=] (tuple<int,int> input) -> void { ... });

join_node<tuple<int,int> *j = new join_node<tuple<int,int>> (g);

make_edge(*j, *f);

Теперь предположим, что мы разбиваем сетку на 10 секций. Мы определяем зависимости для каждого раздела, проверяя список ребер. Если есть ребро, которое соединяет два раздела, скажем part1 а также часть 2, тогда есть зависимость между этими разделами. Я собираю информацию о зависимости, используя векторы на разделы. Теперь возникает проблема: мне нужно использовать эту информацию о зависимостях (хранящуюся в векторах), чтобы создать граф узлов функций, которым нужны правильные типы кортежей, основанные на количестве зависимостей разделов. Например, если part1 а также часть 2 имеют следующие зависимости [2,4,5,9] и [1,3], тогда мне нужны эти два функциональных узла:

function_node<tuple<int,int> > *f1 =
new function_node<tuple<int,int>>(g, 1, [=] (tuple<int,int> input) -> void { ... });

function_node<tuple<int,int,int,int> > *f2 =
new function_node<tuple<int,int,int,int>>(g, 1, [=] (tuple<int,int,int,int> input) -> void { ... });

1

Решение

Кортеж «размеры» есть часть их типа (через шаблоны), и вы не можете выбрать тип во время выполнения из динамически выбранных значений.

Придерживайтесь своего вектора.

1

Другие решения

С тех пор должен быть кортежем, и у вас есть ограничение на длину, тогда вы можете использовать фабричный метод, такой как следующий псевдокод

generic_type MakeTuple(size_t n) {
switch(n) {
case 1:
return make_tuple(int);
case 2:
return make_tuple(int, int);
...
default:
throw 'oh crap';
}
0

По вопросам рекламы [email protected]