Предположим, что у меня есть связка векторов:
vector<int> v1;
vector<double> v2;
vector<int> v3;
все одинаковой длины. Теперь для каждого индекса я я хотел бы иметь возможность рассматривать (v1 [i], v2 [i], v3 [i]) как набор, и, возможно, передавать его. На самом деле, я хочу иметь вектор-кортежи, а не кортежи-векторы, используя которые я могу сделать выше. (В терминах C я могу сказать массив-структуры, а не структуру массивов). Я не хочу выполнять какое-либо переупорядочение данных (думаю: действительно длинные векторы), т.е. Новый вектор поддерживается отдельными векторами, которые я передаю. Пусть.
Теперь я хочу, чтобы класс, который я пишу (назовите его ToVBackedVoT
из-за отсутствия лучшего имени), чтобы поддерживать любой произвольный выбор векторов для его возврата (не только 3, не int, double и int, а не все просто скаляры). Я хочу, чтобы vector-of-tuples изменялся, и никаких копий для построения/присвоений не требуется.
Если я правильно понимаю, вариативные шаблоны и новый тип std::tuple
в С++ 11 - это средство для этого (предполагая, что мне не нужны нетипизированные массивы void*
и т.д.). Однако я только их не знаю и никогда с ними не работал. Можете ли вы помочь мне набросать, как будет выглядеть такой класс? Или как, учитывая
template <typename ... Ts>
Я могу выразить что-то вроде "список аргументов шаблона, являющийся заменой каждого имени в исходных аргументах шаблона вектором элементов этого типа"?
Примечание. Я думаю, что, возможно, мне захочется позже присоединиться к дополнительным векторам к векторам поддержки, сделав экземпляр ToVBackedVoT<int, double, int>
в, например, экземпляр ToVBackedVoT<int, double, int, unsigned int>
. Поэтому помните об этом, когда отвечаете. Это не критично важно.