2013-12-17 4 views
9

У меня есть два кортежа: std::tuple<F1, F2, ..., FN>, std::tuple<G1, G2, ..., GN> (или std::tuple<G1> aka G1). Есть ли способ, чтобы присоединиться к этим наборам обобщенно в std::tuple<F1, F2, ..., FN, G1, G2, ..., GN>, если какой-либо из типов F1, F2 ..., FN, G1, G2 ..., GN не имеет конструктор по умолчанию, но может перемещаться/взаимозаменяемы?Соедините два кортежа в C++ 11

ответ

18

Вы можете использовать std::tuple_cat

std::tuple<foo, bar, baz> buzz; 
std::tuple<moo, meow, arf> bark; 

auto my_cat_tuple = std::tuple_cat(buzz, std::move(bark)); // copy elements of buzz, 
                  // move elements of bark 

выше будет работать, если типы элементов кортежей подвижны или копируемые. И это не требует, чтобы они были по умолчанию конструктивными, если вы не делаете что-то вроде

decltype(std::tuple_cat(buzz, bark)) my_uncatted_yet_tuple; // This will attempt to default construct the tuple elements 

my_uncatted_yet_tuple = std::tuple_cat(buzz, std::move(bark)); 
Смежные вопросы