あなたは好きstd::tuple
ですか?
ゲッターのテンプレート引数は、タイプではなく、メンバーのインデックスを指定します。定義上、タプルの数とタイプはコンパイル時に固定されます。タイプはインデックスに依存し、コンパイル時にタイプがわかっている必要があるため、ゲッターはテンプレート化する必要があります。
template< typename ... types >
struct tuple;
template< typename head, typename ... tail_types >
struct tuple {
head value;
tuple< tail_types ... > tail;
};
template<>
struct tuple<> {};
template< typename tuple, size_t index >
struct tuple_element;
template< typename head, typename ... tail, size_t index >
struct tuple_element< tuple< head, tail ... >, index >
{ typedef typename tuple_element< tail ..., index - 1 >::type type; };
template< typename head, typename ... tail >
struct tuple_element< tuple< head, tail ... >, 0 >
{ typedef head type; };
template< size_t index, typename tuple >
typename std::enable_if< index != 0,
typename tuple_element< tuple, index >::type >::type
get( tuple const &t )
{ return get< index - 1 >( t.tail ); }
template< size_t index, typename tuple >
typename std::enable_if< index == 0,
typename tuple_element< tuple, index >::type >::type
get( tuple const &t )
{ return t.value; }
等