我有一個簡單的類型列表實現;從類型列表創建向量的元組
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