したがって、タプルを次のように定義するとします。
template<typename... Args>
class Tuple
{
Method () {...};
};
Tuple のインスタンス変数を定義してアクセスするには、未定義の数を持つ可能性があることを考慮してください。
したがって、タプルを次のように定義するとします。
template<typename... Args>
class Tuple
{
Method () {...};
};
Tuple のインスタンス変数を定義してアクセスするには、未定義の数を持つ可能性があることを考慮してください。
いくつかの方法があります。最も簡単な方法は、LISP と同じように構造的再帰を使用することです。タプルは次のいずれかです。
(head, tail)
であるペア。head
tail
C++ では、これは次のようになります。
template <typename... Elems>
struct tuple; // undefined
template <>
struct tuple<> { }; // empty tuple
template <typename Head, typename... Tail>
struct tuple<Head, Tail...> {
Head first_elem;
tuple<Tail...> rest;
};
get<n>
次に、実際に要素にインデックスでアクセスするには、関数テンプレートが必要です。タプル自体が再帰的に定義されている方法を理解すれば、実装はかなり簡単になるはずです。
私が言ったように、他のよりトリッキーな実装方法があります - さまざまな理由から、上記はほとんどの現実世界のstd::tuple
実装方法ではありません.
最も簡単な方法は、ブーストタプルライブラリを使用することだと思います-使いやすく、十分にテストされ、文書化されています:
http://www.boost.org/doc/libs/1_48_0/libs/tuple/doc/tuple_users_guide.html