Вместо записи 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 и просто передать ему аргумент шаблона "свойства признаков", когда мне нужен новый тип. Я понятия не имею, как выглядят "черты имени". Возможно, это невозможно.