std::make_pair als typedef?
-
Hallo, ich habe ein Typ:
typedef std::pair<double,double> Offset_t; Offset_t x = std::make_pair<double,double>(x,y);nun möchste ich gerne
std::make_pair<double,double>ersetzen durch bspw:
Offset_t x = SETOFF(x,y);könnte ein define verwenden:
#define std::make_pair<double,double>((a),(b)) SETOFF(x,y)oder gibts noch ne bessere Möglichkeit?
-
Du könntest eine Funktion statt des defines verwenden.
-
Du könntest auch die Template Argumente weglassen.
-
Wenn a und b doubles sind schon.

-
hmm ok das hab ich nicht gewusst. Wenn man die temp argumente weg lassen kann, wieso kann man sie auch angeben??
std::pait <foo,bar> t= std::makepair<la,le>(bla,bla);würde ja dann eh nich gehen
-
Noobiessss schrieb:
typedef std::pair<double,double> Offset_t; Offset_t x = std::make_pair<double,double>(x,y);Warum nicht gleich:
Offset_t x = Offset_t(x,y);[std::make_pair ist doch vorrangig dazu da die Templateargumente selbst zu bestimmen, sodass man sie nicht mehr explizit angeben muss. Das spart im Gegensatz zum Aufruf des std::pair <X, Y> Konstruktors ein paar Zeichen. Da du sowieso ein typedef auf deinen pair-Typen hast, entfällt dieser Vorteil.
Ein weiterer Vorteil von std::make_pair wird man erst im kommenden Standard nutzen können, das ist also erstmal uninteressant:
auto my_pair = std::make_pair(x, y); // Typ von my_pair hängt von x und y ab.Gruß
Don06
-
Noobiessss schrieb:
hmm ok das hab ich nicht gewusst. Wenn man die temp argumente weg lassen kann, wieso kann man sie auch angeben??
Weil das die normale Sprachmechanik ist, dass man die templates auch angeben kann
make_pair ist doch nichts anderes als eine normale template Funktion.Ansonsten ist das angeben sinnvoll, wenn der typ der argumente nicht mit dem typ des benötigten pair übereinstimmt. wenn du also ein float argument hast und ein double pair brauchst.