私は少しずつそれを打破するでしょう。
template<typename... Elements>
class State{
//...
};
これは、任意の数のテンプレートパラメータを取る状態と呼ばれるvariadic class templateを定義します。 State<int,bool>
はState<Foo,Bar,Baz,Qux>
、さらにState<>
のように有効な特殊化です。
decltype(/*...*/)
decltype
は、本質的に、あなたが/*...*/
に置かれたあらゆる式の型に置き換えられます。
typedef decltype(/*...*/) t;
これはt
/*...*/
のタイプにかかわらずのためのtypedefを作ります。
typename TH_convert<T>::t()
これはTH_convert
のその定義所与、std::tuple<T>
と同じである、タイプTH_convert<T>::t
のオブジェクトを作成します。 dependent typeなのでtypename
が必要です。
std::tuple_cat(typename TH_convert<Elements>::t()...)
これは、パラメータパックElements
内のすべてのT
ためtypename TH_convert<T>::t()
でstd::tuple_cat
を呼び出します。だから、State<int,bool>
のために、それは同等です:
std::tuple_cat(TH_convert<int>::t(), TH_convert<bool>::t())
State<Foo,Bar,Baz,Qux>
のために、それは同じだ:だから
std::tuple_cat(TH_convert<Foo>::t(), TH_convert<Bar>::t(),
TH_convert<Baz>::t(), TH_convert<Qux>::t())
、すべてのことをまとめる:
typedef decltype(std::tuple_cat(typename TH_convert<Elements>::t()...)) t;
をこれはt
typedefの作りますstd::tuple_cat
の結果のタイプは、それぞれT
のTH_convert<T>::t()
の結果となります。Elements
。
http://en.cppreference.com/w/cpp/language/parameter_pack – lapk
「TH_convert t()...はかなり誤植です。 –
kamikaze
@Danh OPは 'TH_convert :: t()...'と入力することを意味していたので、もっと意味があります。 –
kamikaze