Ein häufiges Designproblem, in das ich hineingeraten bin, ist, dass ich zwei Variablen zusammenbündele und dann die Fähigkeit verliere, sie sinnvoll zu referenzieren.Kann ich std :: pair verwenden, aber erste und zweite Mitgliedsnamen umbenennen?
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?
hielt ich habe das Schreiben grundlegende Strukturen statt, aber dann habe ich viel über die Vorteile verlieren, die mit std::pair
kommen:
- make_pair
- Nichtmitglied überladene Operatoren
- Swap
- bekommen
- usw.
Gibt es eine Möglichkeit zum Umbenennen oder Bereitstellen einer alternativen Kennung für die Datenelemente first
und second
?
Ich hatte gehofft, dass all die Funktionen zu nutzen, die std::pair
akzeptieren,
aber noch in der Lage sein, sie auf folgende Weise zu verwenden:
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);
Ich glaube nicht, Sie können. Vielleicht eine Klasse erstellen, die std :: pair umschließt? –
Wahrscheinlich Overkill für die Aufgabe wie definiert, aber [BOOST_FUSION_DEFINE_STRUCT] (http://www.boost.org/doc/libs/1_59_0/libs/fusion/doc/html/fusion/adapted/define_struct.html) können Sie generieren Eine Struktur, die Vergleichsoperatoren, Swap usw. automatisch generiert, aber mit benutzerdefinierten Feldnamen/-typen. – Mankarse
Wie wäre es mit 'structs: std :: pair {int & x = this-> first; int & y = das-> zweite; }; '? –
Slava