std::make_pair
-
Folgender Code ist fuer mich verstaendlich:
class X { }; class Y { }; int main() { X x; Y y; std::make_pair<X, Y>(x, y); // returned ein std::pair<X, Y>(x, y) }Warum funktioniert aber folgendes ebenfalls:
std::make_pair(x, y); // returned auch ein std::pair<X, Y>(x, y)Warum kann man std::make_pair denn ohne Template Parameter aufrufen?
Woher kriegt die Funktion denn ihre Typinformationen, um ein std::pair<X, Y>(x, y) anzulegen?
-
der compiler weis ja welche typen X und Y haben und daher weis er dann was er da machen muss.
-
lol. das ist doch ne ganz normale herleitung. geht aber nur bei template-funktionen.
-
Woher kriegt die Funktion denn ihre Typinformationen, um ein std::pair<X, Y>(x, y) anzulegen?
Aus den Typen der übergebenen Parameter.
-
Bashar schrieb:
Woher kriegt die Funktion denn ihre Typinformationen, um ein std::pair<X, Y>(x, y) anzulegen?
Aus den Typen der übergebenen Parameter.
Und wie macht sie das? Wohl nicht mit typeid...
Meine std::make_pair Funktion sieht naemlich wie folgt aus:template<class _T1, class _T2> inline pair<_T1, _T2> make_pair(_T1 __x, _T2 __y) { return pair<_T1, _T2>(__x, __y); }Das geschieht also implizit? Was ist das fuer ein Mechanismus?
-
Der Vorgang nennt sich template argument deduction
-
Danke! Kannte ich noch gar nicht...
http://www.langer.camelot.de/Articles/Cuj/02.FctTemplArgs/FunctionTemplateArguments.html