简体   繁体   English

如何在 C++ 中对成员数据进行别名?

[英]How to alias pair member-data in C++?

How to alias pair member-data in C++?如何在 C++ 中对成员数据进行别名?

I have a container of std::pair<int,int> to store master-slave pairs.我有一个std::pair<int,int>的容器来存储主从对。

For better readability I want to use something like:为了更好的可读性,我想使用类似的东西:

using Master = std::pair<int,int>::first;

std::pair<int,int> myPair;
auto myMaster = myPair.Master;

What would be the correct syntax here?这里的正确语法是什么?

Thank you, in advance.先感谢您。

You can name a pointer-to-member您可以命名指向成员的指针

constexpr auto Master = &std::pair<int,int>::first;

std::pair<int,int> myPair;
auto myMaster = myPair.*Master;

An alternative would be to use the tuple-like get access to std::pair with a self-defined constant:另一种方法是使用类似元组的get访问std::pair和自定义常量:

const std::size_t Master = 0;

std::pair<int,int> myPair;
auto myMaster = std::get< Master >( myPair );

Somewhat cleaner and more readable than pointered access IMHO.恕我直言,比指针访问更清晰、更易读。

I am going with the following:我要进行以下操作:

int main() {
    cout<<"Hello World\n";
    
    constexpr auto Master = &std::pair<int,int>::first;

    std::pair<int,int> myPair;
    std::pair<int,int> myPair2;

    myPair.*Master = 321;
    myPair2.*Master = 10;
    cout<<myPair.*Master;
    cout<<myPair2.*Master;

    return 0;
}

Thanks @ Caleth谢谢@Caleth

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM