Digamos que eu defina uma tupla como tal:
template<typename... Args>
class Tuple
{
Method () {...};
};
Como eu defino e acesso as variáveis de instância para Tuple, considerando que elas podem ter um número indefinido?
Respostas:
9 para resposta № 1Existem algumas maneiras. O mais fácil é usar a recursão estrutural da maneira que o LISP faz: uma tupla é
- uma tupla vazia ou
- um par
(head, tail)
Ondehead
é o primeiro elemento da tupla etail
é uma tupla que contém o restante dos elementos.
Em C ++, isso seria semelhante ao seguinte:
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;
};
Então você precisa de um get<n>
template de função para realmente acessar os elementos por índice; deve ser bem fácil de implementar se você grocar como a própria tupla é definida recursivamente.
Como eu disse, existem outros métodos de implementação mais complicados - por vários motivos, o acima não é como a maioria do mundo real std::tuple
implementações fazem isso.
0 para resposta № 2
Acho que a maneira mais fácil é usar a biblioteca boost tuple - simples de usar, bem testada e documentada:
http://www.boost.org/doc/libs/1_48_0/libs/tuple/doc/tuple_users_guide.html