而不是写 town->first
我想写 town->name
。内联命名访问器( 重命名映射迭代器的第一个和第二个 以及 命名 std::pair 成员)是我迄今为止找到的最佳解决方案。我对命名访问器的问题是失去类型安全性: pair<int,double>
可能指的是 struct { int index; double value; }
或 struct { int population; double avg_temp; }
。谁能提出一个简单的方法,也许类似于特征?
我经常想从一个函数返回一对或一个元组,每次引入一个新的类型,比如 struct city { string name; int zipcode; }
和它的 ctor 是很累人的。我很高兴了解 boost 和 C++0x,但我需要一个没有 boost 的纯 C++03 解决方案。
更新
关于 andrewdski 的问题:是的,像 pair<int=index, double=value>
这样的(假设的)语法会创建一个与 pair<int=population, double=avg_temp>
不同的类型,可以满足您的要求。我什至不介意必须实现自定义对/元组模板类 ONCE 并在需要新类型时适当地将“名称特征”模板参数传递给它。我不知道“名字特征”会是什么样子。也许这是不可能的。
原文由 Ali 发布,翻译遵循 CC BY-SA 4.0 许可协议
我看不出你怎么可能做得比
那里没有什么是不必要的。您需要两个成员的类型,您的整个问题都围绕着为两个成员命名,并且您希望它是唯一的类型。
你知道聚合初始化语法,对吧?您不需要构造函数或析构函数,编译器提供的就可以了。
示例:http: //ideone.com/IPCuw
类型安全要求您引入新类型,否则
pair<string, int>
在 (name, zipcode) 和 (population, temp) 之间是不明确的。在 C++03 中,返回一个新元组需要:
或编写一个方便的构造函数:
要得到
但是,使用 C++0x,您将可以编写
并且不需要用户定义的构造函数。