Я пытаюсь создать вариационный контейнер-шаблон, в котором хранится набор векторов элементов. Точка этого контейнера - это элементы всех векторов, все связанные, и я хочу поддерживать эту корреляцию позже, но это не нужно для вычисления. Представьте, если хотите, vector_3 и ref_id какого-либо типа.Как я могу кормить кортежи?
Контейнер будет равномерно мутировать векторы вместе. Таким образом, части, которые я понимаю, выглядят так:
template<typename ...Elems>
class container
{
std::tuple<std::vector<Elems>...> data_;
public:
template<typename I>
const typename std::tuple_element<I, data_type>::type &nth_index() const
{ return std::get<I>(data_); }
};
Я борюсь со способом вставки. Я думал что-то вдоль линий:
void push_back(std::tuple<Elems...> &values)
{
std::tuple<std::back_insert_iterator<std::vector<Elems>>...> inserters;
}
Но я понятия не имею, как инициализировать этот «Inserters» кортеж. Я рассматривал различные примеры рекурсивных шаблонов здесь, в stackoverflow, и я не могу держать все это в своей голове достаточно долго, чтобы понять это.
Я предполагаю, если у меня был такой кортеж, я мог бы использовать простое задание:
inserters = values;
Я хотел бы также написать аксессор во всех массивах, которая возвращает кортеж из значений:
std::tuple<Elems &...> operator[](const size_t index)
{
...
}
Но еще раз, я не знаю, как инициализировать этот кортеж.
Я не могу быть единственным, кто когда-либо хотел это сделать, и я не могу найти хороший ресурс, чтобы его изучить. Тем временем я пытаюсь переварить оригинальное предложение шаблона шаблона для 0x. Проницательность была бы оценена. Я ограничен внедрением MSVC 2012.
Черная магия, друг мой. Я буду изучать это некоторое время, пытаясь понять все, что происходит. Это не интуитивно для меня. Есть ли у вас ресурс для изучения типовых и современных шаблонов? –
@MatthewReddington Хорошее начало - это [Язык программирования C++ 4-го издания] (http://www.amazon.com/C-Programming-Language-4th/dp/0321563840/ref=sr_1_1?ie=UTF8&qid=1455664887&sr=8 -1 & ключевые слова = C% 2B% 2B).Но большинство вещей вы узнаете из SO и [cppreference] (http://en.cppreference.com/w/) и экспериментируете. – 101010