c++ - 如何保持“第一”和“第二”用结构替换 std::pair?
问题描述
我有一对std::pair<int, long>
,并且在各个地方的代码中使用pr.first
, pr.second
(也是ppr->first
, ppr->second
)类型的符号。现在我想将这对更改为结构,
struct ABC
{
int a;
long b;
};
有没有办法可以在代码中保留这些“第一”和“第二”符号来访问这个结构?也许创建一个功能?
解决方案
撇开您想要这样做的原因(在没有任何其他信息的情况下至少可以说是有问题的),最简单的方法是使用
struct ABC
{
int first;
long second;
};
但是,如果您希望成员被称为其他名称并且您不想诉诸“getter”函数(在调用站点需要括号),则解决方案是使用成员变量的引用:
struct ABC {
int a;
long b;
int& first;
long& second;
ABC() : first(a), second(b) {}
};
但是,如果您采用这一点,您需要自己编写属于“5 规则”的构造函数以正确绑定引用,否则看似无痛的复制或移动将不起作用。
尽管此答案展示了 C++ 的强大功能,但该语言以其允许您自爆的能力而闻名。尽管解决方案可能很花哨,但在您的代码库甚至语言本身的演变中引入奇怪错误的可能性怎么强调都不为过。因此,这应该被认为是一种反模式,并且只在真正例外的情况下使用。
推荐阅读
- javascript - 用 javascript 激活一个类
- java - 什么是使用 Java 从 URL 下载文件的更快方法
- video - FFMPEG,如何摆脱视频中的“破碎像素”?
- c - 创建了多少进程?
- java - 通过“参数”选项卡将查询参数传递给 GET 请求
- vue.js - 为什么在 Vue 中使用 svg-sprite-loader 时 svg 无法显示?
- testing - 如何遍历表,然后将鼠标悬停在 puppeteer 中具有给定列值的特定行上?
- javascript - 写入 Google Document 表格单元格时如何避免服务调用
- reactjs - 表单在提交reactjs时重新加载
- html - CSS font-variant-numeric 斜线零不起作用