Schwierigkeiten mit templates
-
Shade Of Mine schrieb:
Sofern common_type das korrekte macht. Ich denke ja, habe es aber noch nie verwendet.
common_type (sofern nicht durch den Nutzer spezialisiert) ist über decltype(true?declval<T>():declval<U>()) definiert (20.9.7.6/3)
Eine etwas bessere Variante dürfte
template <typename T1, typename T2> typename std::common_type<T1, T2>::type max(T1&& t1, T2&& t2) { return t1 < t2 ? std::forward<T2>( t2 ): std::forward<T1>( t1 ); }sein. Damit wird auch mit kompatiblen lvalues sinnvoll umgegangen (und bei Gleichheit hat der linke Parameter Vorrang, was bei Verkettung das Naheliegendere sein dürfte).
-
t1 < t2 ? std::forward<T1>( t2 ): std::forward<T2>( t1 );
das soll
t1 < t2 ? std::forward<T2>( t2 ): std::forward<T1>( t1 );
heissen nehme ich an, oder?
-
Shade Of Mine schrieb:
t1 < t2 ? std::forward<T1>( t2 ): std::forward<T2>( t1 );
das soll
t1 < t2 ? std::forward<T2>( t2 ): std::forward<T1>( t1 );
heissen nehme ich an, oder?ja.
-
Shade Of Mine schrieb:
t1 < t2 ? std::forward<T1>( t2 ): std::forward<T2>( t1 );
das soll
t1 < t2 ? std::forward<T2>( t2 ): std::forward<T1>( t1 );
heissen nehme ich an, oder?Wird das nicht eh automatisch deduziert?
-
Sone schrieb:
Shade Of Mine schrieb:
t1 < t2 ? std::forward<T1>( t2 ): std::forward<T2>( t1 );
das soll
t1 < t2 ? std::forward<T2>( t2 ): std::forward<T1>( t1 );
heissen nehme ich an, oder?Wird das nicht eh automatisch deduziert?
Nein, du gibst ja explizit den Typ an.
Und forward<T1>(t2) wuerde t2 ja in T1 konvertieren. Was uU schlecht waere, wenn T1 zB int und T2 double waere.
-
Shade Of Mine schrieb:
Sone schrieb:
Shade Of Mine schrieb:
t1 < t2 ? std::forward<T1>( t2 ): std::forward<T2>( t1 );
das soll
t1 < t2 ? std::forward<T2>( t2 ): std::forward<T1>( t1 );
heissen nehme ich an, oder?Wird das nicht eh automatisch deduziert?
Nein, du gibst ja explizit den Typ an.
Das ist es ja, ich dachte man kann die explizite Angabe wegfallen lassen.
t1 < t2 ? std::forward( t2 ): std::forward( t1 );
-
Nein. forward will wissen, ob der Typ vor Reference Collapsing eine Lvalue-Referenz war oder nicht, weil es danach nicht mehr eindeutig ist.