Powszechnie występującym problemem projektowym, który napotykam, jest to, że łączę ze sobą dwie zmienne, a następnie tracę możliwość odwoływania się do nich w znaczący sposób.Czy mogę użyć std :: pair, ale zmienić nazwy członków .first i .second?
std::pair<int,int> cords;
cord.first = 0; //is .first the x or y coordinate?
cord.second = 0; //is .second the x or y coordinate?
ja już za pisanie podstawowe konstrukcjom zamiast, ale potem stracić dużo korzyści, które wraz z std::pair
:
- make_pair
- non-member przeciążone operatorów
- swapowe
- uzyskać
- itp.
Czy istnieje sposób zmiany nazwy lub zapewnienia alternatywnego identyfikatora dla elementów danych first
i second
?
Miałem nadzieję na wykorzystanie wszystkich funkcji, które akceptują std::pair
,
ale nadal będą mogli z nich korzystać w sposób następujący:
std::pair<int,int> cords;
//special magic to get an alternative name of access for each data member.
//.first and .second each have an alternative name.
cords.x = 1;
assert(cords.x == cords.first);
Nie sądzę, jest to możliwe. Może stworzyć klasę, która owija std :: pair? –
Prawdopodobnie przesada dla zadania zdefiniowanego, ale [BOOST_FUSION_DEFINE_STRUCT] (http://www.boost.org/doc/libs/1_59_0/libs/fusion/doc/html/fusion/adaptowane/define_struct.html) umożliwia generowanie struktura, która automatycznie generuje operatory porównania, wymiany itp., ale z niestandardowymi nazwami/typami pól. – Mankarse
Co powiesz na 'struct cords: std :: pair {int & x = this-> first; int & y = this-> second; }; '? –
Slava