/ / Estou fazendo uma aula de tupla em C ++ 11 usando modelos variados. Como trabalho com suas variáveis ​​de instância? - c ++, c ++ 11, tuplas, modelos variados

Eu estou fazendo uma classe de tupla no C + + 11 usando modelos variadic. Como trabalho com suas variáveis ​​de instância? - c ++, c ++ 11, tuplas, variadic-templates

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 № 1

Existem 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) Onde head é o primeiro elemento da tupla e tail é 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