你的意思是像std::tuple
?
getter 的模板参数指定成员的索引,而不是类型。根据定义,元组的数量和类型在编译时是固定的。由于类型取决于索引,并且类型必须在编译时已知,因此必须对 getter 进行模板化。
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; }
等等