у туплей не просто отличный дизайн.
он практичен.
это оценит каждый, кто столкнется с потребностью в туплях.
Хотелось бы увидеть пример где выгоды (весьма) ощутимы. Спасибо
первое что пришло в голову из личной практики:
с++03, вариадик шаблонов ещё нет.
// --- отправка сообщений подписчикам
// через систему сообщений
SendMessage(10)("hello")("world")();
под капотом SendMessage в статике генерируется тупль.
и уже в виде тупля он доставляется подписчикам.
что бы прочитать сообщение,
от подписчика требуется лишь уметь принимать тупель
с определенным набором типов полей.
и не нужно изобретать на каждый чих отдельные структуры,
наследовать их от каких то интерфейсов, и тп.
другой пример:
это из библиотеки libpqxx
если не в курсе: библиотека для работы с серверами базы данных PostgreSQL.
поставляется разработчиками самого постгре.
делаем запрос в базу, получаем некую выборку - таблицу.
тупель здесь (в старых версиях использовался boost::tuple, в новых - std::tuple),
используется как основа для построения вариативного механизма.
дизайн примерно следующий:
тупель строка = result[столбец];
auto id = строка["id"];
auto name = строка["name"];
ещё один пример:
я подозреваю, что тупли изначально были изобретены
именно для решения этой инженерной задачи:
нужно забиндить входные аргументы для последующего использования в некотором будущем.
void foo(int,const char*);
...
auto delegate = std::bind(foo, 10, "hello"); //<--- запоминаем функцию и аргументы
delegate(); //<--- не указываем аргументы, мы их итак уже запомнили
// вызов эквивалентен: foo(10, "hello");
std::bind умеет биндить любые функции с любым количеством любых аргументов.
и вот как прикажите ему запоминать списки аргументов?
я сам лично делал собственные велосипеды-делегаты,
и там столкнувшись с этой проблемой,
естественным способом вывел велосипедный-тупель.
других вариантов просто нет.
---------------------------------------------------------------------------
резюмируя:
предназначения тупля - генерация произвольной структуры,
содержащей поля разных типов.
область применения тупля - получение,хранение,транспортировка
входных данных различных типов.
киллер-фича туплей - диагностика ошибок времени компиляции.