【发布时间】:2011-08-30 08:34:22
【问题描述】:
我不想写town->first,而是写town->name。内联命名访问器(Renaming first and second of a map iterator 和 Named std::pair members)是迄今为止我找到的最佳解决方案。我对命名访问器的问题是类型安全的损失:
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 并在需要新类型时适当地将“名称特征”模板参数传递给它。我不知道“名字特征”会是什么样子。也许这是不可能的。
【问题讨论】:
-
这不是一个真正的问题吗?为什么投反对票?
-
@Bo Persson:在投票之前你应该先阅读这个问题:我在哪里提到了继承?
-
@Bo Persson 对于较大的对象有 std::tuple / boost::tuple。
-
也许问题在于人们不太了解您的要求。你说你想区分
struct { int index; double value; }和struct { int population; double avg_temp; },但是你想通过重命名pair成员来做到这一点?这到底是怎么回事?看起来你肯定想要一个结构。 (为了记录,我没有投反对票。) -
那么像
pair<int=index, double=value>这样的(假设的)语法会创建一个与pair<int=population, double=avg_temp>不同的类型,是否满足您的要求?
标签: c++ templates stl typedef traits