Почему никто не использует кортежи в С++, Boost Tuple Library или стандартную библиотеку для TR1? Я прочитал много кода на С++ и очень редко вижу использование кортежей, но часто вижу множество мест, где кортежи будут решать многие проблемы (обычно возвращая несколько значений из функций).
Кортежи позволяют вам делать всевозможные классные вещи, такие как:
tie(a,b) = make_tuple(b,a); //swap a and b
Это, безусловно, лучше, чем это:
temp=a;
a=b;
b=temp;
Конечно, вы всегда можете это сделать:
swap(a,b);
Но что, если вы хотите повернуть три значения? Вы можете сделать это с помощью кортежей:
tie(a,b,c) = make_tuple(b,c,a);
Кортежи также облегчают возврат нескольких переменных из функции, что, вероятно, гораздо более распространенное явление, чем обмен значениями. Использование ссылок на возвращаемые значения, конечно, не очень элегантно.
Есть ли большие недостатки в кортежах, о которых я не думаю? Если нет, то почему они редко используются? Они медленнее? Или просто люди не привыкли к ним? Полезно ли использовать кортежи?