赤ちゃんの一例として、あなたはこのような何かを想像することができます - 今の一つの固定タイプのちょうどタプル:
template <int N> struct MyTuple : MyTuple<N - 1>
{
T data;
};
template <> struct MyTuple<0> { };
実世界のソリューションを、もちろんデータ型の可変長引数テンプレートパラメータを持つことになり、また、可変のコンストラクタを提供し、最初の要素でdata
を構築し、残りの要素を基本コンストラクタに渡します。
今、私たちはi
番目の要素を試してみて、アクセスすることができます。
template <int K> struct get_impl
{
template <int N> static T & get(MyTuple<N> & t)
{
return get_impl<K - 1>::get(static_cast<MyTuple<N - 1>&>(t));
}
};
template <> struct get_impl<0>
{
template <int N> static T & get(MyTuple<N> & t)
{
return t.data;
}
};
ここで重要なのは、K = 0
実際の要素を抽出する際に専門を持つことである、とあなたがそこにいるまで継承階層をキャストします。最後に、関数テンプレートを使用してタプルタイプの控除をslingshotする:
これは私が理解できないことですが、複数の値からなるタプルが再帰的テンプレートメソッドを使用してどのように処理されるのでしょうか? –
@GearoidMurphy:多次元テンプレートパラメータをタプル定義に追加するだけです。 'get'の戻り値に' auto'/'decltype'を使って簡単にすることができます。 –
可変テンプレートではありませんC++ x11?、ブーストタプルの実装はこの機能に依存しません。 –