我正在尝试制作一个存储元素向量元组的可变参数模板容器。这个容器的重点是所有向量中的元素都是相关的,我想在以后保持这种相关性,但这对于计算来说不是必需的。想象一下,如果你愿意的话,一个 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;
}
但我不知道如何初始化这个“插入器”元组。我一直在 stackoverflow 上查看各种递归模板示例,但我无法将其全部记在脑海中足够长的时间来理解它。
我假设如果我有这样一个元组,我可以使用简单的赋值:
inserters = values;
我还想在所有返回值元组的数组中编写一个访问器:
std::tuple<Elems &...> operator[](const size_t index)
{
...
}
但是再一次,我不知道如何初始化这个元组。
我不可能是唯一一个想要这样做的人,而且我找不到好的资源来学习它。同时,我正在尝试消化 0x 的原始可变参数模板提案。洞察力将不胜感激。我受到 MSVC 2012 实施的限制。