2013-05-17 20 views
10

mam krotki:Dołączanie wartość krotki

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

i mam pojedynczej zmiennej pewnego rodzaju:

MyClass bar; 

jaki sposób należy przejść o pisaniu rodzajowe funkcji, która dołącza pojedyncza wartość (lub nawet wiele wartości, jeśli to możliwe) do nowej krotki?

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

nie można po prostu użyć [ 'tuple_cat'] (http://en.cppreference.com/w/cpp/utility/tuple/tuple_cat)? – Zeta

+0

Nie ma już C++ 0x, równie dobrze możesz używać C++ 11. Zmiana tytułu. – paxdiablo

+0

@paxdiablo Nie ma "krotki" w C++ przed 11, więc możemy równie dobrze usunąć tagi z tytułów;) –

Odpowiedz

15

Zastosowanie std::tuple_cat (jak już komentował 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"; 
} 

wyjściowa:

 
10 
Hello, world! 
0 
a 

Zobacz http://ideone.com/dMLqOu.

5

dla dołączania pojedynczy element, to będzie działać:

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