Вместо записи town->first я хотел бы написать town->name. Inline named accessors (Переименование первого и второго итератора карт и Именованные элементы std:: pair) - лучшие решения, которые я нашел до сих пор. Моя проблема с именованными аксессуарами - это потеря безопасности типа:
pair<int,double> может относиться к struct { int index; double value; } или к struct { int population; double avg_temp; }. Может ли кто-нибудь предложить простой подход, возможно, нечто похожее на черты?
Я часто хочу вернуть пару или кортеж из функции, и довольно утомительно вводить новый тип типа struct city { string name; int zipcode; } и его ctor каждый раз. Я очень рад узнать о boost и С++ 0x, но мне нужно чистое решение С++ 03 без повышения.
Обновление
Re andrewdski question: yes, (гипотетический) синтаксис вроде pair<int=index, double=value>, который создавал бы отдельный тип из pair<int=population, double=avg_temp>, соответствовал бы вашему требованию. Я даже не возражаю, чтобы реализовать собственный шаблон шаблона пары/кортежа ONCE и просто передать ему аргумент шаблона "свойства признаков", когда мне нужен новый тип. Я понятия не имею, как выглядят "черты имени". Возможно, это невозможно.