首页 > 解决方案 > 如何保持“第一”和“第二”用结构替换 std::pair?

问题描述

我有一对std::pair<int, long>,并且在各个地方的代码中使用pr.first, pr.second(也是ppr->first, ppr->second)类型的符号。现在我想将这对更改为结构,

struct ABC 
{
    int a;
    long b;
};

有没有办法可以在代码中保留这些“第一”和“第二”符号来访问这个结构?也许创建一个功能?

标签: c++structstd-pair

解决方案


撇开您想要这样做的原因(在没有任何其他信息的情况下至少可以说是有问题的),最简单的方法是使用

struct ABC
{
    int first;
    long second;
};

但是,如果您希望成员被称为其他名称并且您不想诉诸“getter”函数(在调用站点需要括号),则解决方案是使用成员变量的引用:

struct ABC {
    int a;
    long b;

    int& first;
    long& second;

    ABC() : first(a), second(b) {}
};

但是,如果您采用这一点,您需要自己编写属于“5 规则”的构造函数以正确绑定引用,否则看似无痛的复制或移动将不起作用。

尽管此答案展示了 C++ 的强大功能,但该语言以其允许您自爆的能力而闻名。尽管解决方案可能很花哨,但在您的代码库甚至语言本身的演变中引入奇怪错误的可能性怎么强调都不为过。因此,这应该被认为是一种反模式,并且只在真正例外的情况下使用。


推荐阅读