2013-05-17 27 views
10

ho una tupla:Aggiunta di un valore a una tupla

std::tuple<int, std::string, bool> foo = { 10, "Hello, world!", false }; 

e ho una sola variabile di un certo tipo:

MyClass bar; 

Come devo fare per scrivere una funzione generica che aggiunge un valore singolo (o anche più valori, se possibile) in una nuova tupla?

std::tuple<int, std::string, bool, MyClass> fooBar = tuple_append(foo, bar); 
                ^^^^^^^^^^^^ 
              // I need this magical function! 
+10

Non può semplicemente usare [ 'tuple_cat'] (http://en.cppreference.com/w/cpp/utility/tupla/tuple_cat)? – Zeta

+0

Non c'è più C++ 0x, si può anche usare C++ 11. Cambiando il titolo. – paxdiablo

+0

@paxdiablo In ogni caso non esiste una 'tupla 'in C++ pre-11, quindi possiamo anche rimuovere i tag dai titoli;) –

risposta

15

Usa std::tuple_cat (come già commentato da Zeta):

#include <iostream> 
#include <string> 
#include <tuple> 

int main() 
{ 
    std::tuple<int, std::string, bool> foo { 10, "Hello, world!", false }; 

    auto foo_ext = std::tuple_cat(foo, std::make_tuple('a')); 

    std::cout << std::get<0>(foo_ext) << "\n" 
       << std::get<1>(foo_ext) << "\n" 
       << std::get<2>(foo_ext) << "\n" 
       << std::get<3>(foo_ext) << "\n"; 
} 

uscita:

 
10 
Hello, world! 
0 
a 

Vedi http://ideone.com/dMLqOu.

5

Per l'aggiunta di un singolo elemento, questo funzionerà:

template <typename NewElem, typename... TupleElem> 
std::tuple<TupleElem..., NewElem> tuple_append(const std::tuple<TupleElem...> &tup, const NewElem &el) { 
    return std::tuple_cat(tup, std::make_tuple(el)); 
} 

Live example

Problemi correlati