Я не понимаю, как вы можете добиться большего успеха, чем
struct city { string name; int zipcode; };
Там нет ничего несущественного. Вам нужны типы двух членов, весь ваш вопрос основан на присвоении имен двум членам, и вы хотите, чтобы это был уникальный тип.
Вы знаете о синтаксисе инициализации агрегата, верно? Вам не нужен конструктор или деструктор, с компилятором все в порядке.
Пример: http://ideone.com/IPCuw
Безопасность типов требует, чтобы вы вводили новые типы, в противном случае pair<string, int>
неоднозначен между (имя, почтовый индекс) и (население, температура).
В C ++ 03 для возврата нового кортежа требуется:
city retval = { "name", zipcode };
return retval;
или написание вспомогательного конструктора:
city::city( std::string newName, int newZip ) : name(newName), zipcode(newZip) {}
чтобы получить
return city("name", zipcode);
С C ++ 0x, однако, вам будет разрешено писать
return { "name", zipcode };
и пользовательский конструктор не требуется.