1

したがって、タプルを次のように定義するとします。

template<typename... Args>
class Tuple 
{
    Method () {...};
};

Tuple のインスタンス変数を定義してアクセスするには、未定義の数を持つ可能性があることを考慮してください。

4

2 に答える 2

9

いくつかの方法があります。最も簡単な方法は、LISP と同じように構造的再帰を使用することです。タプルは次のいずれかです。

  • 空のタプル、または
  • がタプルの最初の要素であり、残りの要素を含むタプル(head, tail)であるペア。headtail

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実装方法ではありません.

于 2011-11-19T00:25:45.773 に答える
0

最も簡単な方法は、ブーストタプルライブラリを使用することだと思います-使いやすく、十分にテストされ、文書化されています:

http://www.boost.org/doc/libs/1_48_0/libs/tuple/doc/tuple_users_guide.html

于 2011-11-19T00:31:42.103 に答える