我有一个简单的类型列表实现;从类型列表创建向量的元组
template<typename... Ts>
struct Typelist
{
static constexpr size_t count{sizeof...(Ts)};
};
我想用它来做,是产生std::vector>
在类型串每一种类型的std::tuple
;例如:
struct A {};
struct B {};
struct C {};
using myStructs = typelist<A,B,C>;
using myList = tupleOfVectorTypes<myStructs>; tuple<vector<A>, vector<B>, vector<C>>
这就是我一直在玩弄:
template<template<typename... Ts> class T>
struct List
{
using type = std::tuple<std::vector<Ts>...>;
};
然而,一直吐回,它需要一个类型。我已经试过包装TS在decltype
,像这样:
using type = std::tuple<std::vector<decltype(Ts)>...>;
但是,这是错误的,以及,我猜我使用decltype
不当为好。 那么,我怎么能创建一个类型向量的元组,基于我扔掉的类型列表呢?
太棒了!我仍然在学习一些关于可变模板的知识,你能解释一下为什么这个模型完全适用吗? 当我看到 'template class t,typename ... Ts> struct列表> { 使用类型= std :: tuple ...> ; };' 我可以看到List将是类型t,它包含Ts的类型,但为什么...... Ts具有所有类型而不是......参数? –
Acorn
'template class T> {/ * ... * /};' - 模板看到的唯一类型,可以访问的是'T'。这是模板参数。 “'... Args'”不是模板参数。它是模板参数的参数,模板的主体只知道'T'。 “Args”几乎被忽略。为了解决这个范围问题,专门研究这个模板,“'List>''以某种方式使'Ts ...'成为”一等公民“。 –
啊,我现在看到它。 List是一种类型为T的T,当我将它传递给模板时,它从内部“拉起来”。我需要停止阅读模板然后功能,并开始阅读功能/类然后模板。 – Acorn