我有一对std::pair<int, long>
,并且在不同地方的代码中使用pr.first
,pr.second
(也有ppr->first
,ppr->second
)这种表示法。
现在,我想将对更改为结构
struct ABC
{
int a;
long b;
};
有没有一种方法可以在代码中保留这些“第一”和“第二”符号来访问此结构?也许创建一个函数?
答案 0 :(得分:3)
撇开您想要这样做的原因(在没有任何其他信息的情况下,至少可以说是可疑的),最简单的方法就是使用
struct ABC
{
int first;
long second;
};
但是,如果您希望将成员称为其他和,则不想使用“ getter”功能(在调用位置需要括号),一种解决方案是使用成员变量的参考:
struct ABC {
int a;
long b;
int& first;
long& second;
ABC() : first(a), second(b) {}
};
但是,如果您采用这种方式,则需要自己编写“ 5则规则”的一部分的构造函数,以正确地绑定引用,否则看似无痛的复制或移动将无效。
尽管此答案展示了C ++的强大功能,但该语言以其使您能够用脚射击自己的能力而闻名。作为解决方案的幻想,在您的代码库中甚至在语言本身发展的过程中,可能会引入好奇的bug的可能性不可低估。因此,应该将其视为反模式,并且仅在真正例外的情况下使用。
答案 1 :(得分:2)
您可能想尝试一下:
struct ABC
{
union {
int a;
int first;
};
union {
long b;
long second;
};
};
这允许您使用a
和first
以及b
和second
可互换。
最好替换first
和second
的用法以避免混淆。
如前所述,这是undefined behaviour 12.3 Unions
,但至少可以与MSVC和GCC一起使用。
感谢评论