シンプルなタイプリストの実装があります。タイプリストからベクトルのタプルを作成します。
template<typename... Ts>
struct Typelist
{
static constexpr size_t count{sizeof...(Ts)};
};
はtypelistに種類ごとにstd::vector>
のstd::tuple
を生成するために、私はそれで何をしたいのか、です。例えば:
template<template<typename... Ts> class T>
struct List
{
using type = std::tuple<std::vector<Ts>...>;
};
しかし、それはタイプを期待していること、バック吐き続け:
struct A {};
struct B {};
struct C {};
using myStructs = typelist<A,B,C>;
using myList = tupleOfVectorTypes<myStructs>; tuple<vector<A>, vector<B>, vector<C>>
これは、私が一緒に遊んでいたものです。
using type = std::tuple<std::vector<decltype(Ts)>...>;
をしかし、それは同様に間違っている、と私は私も間違ってdecltype
を使用しています推測している:私はそうのように、decltype
でTsのをラップしようとしました。 型リストの型に基づいて型のベクトルのタプルを作成するにはどうすればよいですか?
恐ろしいです!私はまだvariadicテンプレートについて少しは学んでいますが、なぜこれが正確に動作するのか説明できますか? 'テンプレートクラスt、型名... Ts> 構造体リスト> { type = std :: tuple ...>を使用すると、 ; }; ' リストはTsの型を保持する型tであることがわかりますが、なぜ... Tsはすべての型を持っていますが... Args? –
Acorn
'template class T> {/ * ... * /};' - テンプレートが参照する唯一の型で、アクセスできるのは 'T'です。これがテンプレートパラメータです。 "' ... Args' "はテンプレートパラメータではありません。これはテンプレートパラメータのパラメータであり、テンプレートの本体は 'T'のみを知っています。 "Args"はほとんど無視されています。このスコープの問題を回避するために、テンプレートを特化することで、 "List"は '' Ts ... 'を「ファーストクラスの市民」に話しています。 –
ああ、私は今それを見る。 ListはTの型で、その型はTs ...であり、テンプレートに渡すとその型から "プルアップ"されます。テンプレートを読んだり、関数を読んだり、関数/クラスを読んだり、テンプレートを読んだりする必要があります。 – Acorn