S
happystudent schrieb:
ScottZhang schrieb:
Das klingt deshalb fragwürdig, weil dein Klassen so vom jeweiligen Aufruf des Konstruktors abhängt (nicht der Zustand sonder die Klasse selbst).
Ja und? Ganz ehrlich, wo ist dabei jetzt das Problem, bei template Funktionen funktioniert es ja ganz genauso?
Der Type des Objekt muss vollständig sein bevor man damit irgendwas macht. Ich mein wie stellst du dir das vor? Du erzeugts zwei Objekte vom gleichen Type und anch dem Aufruf des Konstruktors haben sie nicht mehr den gleichen Type, hää?
Denk doch mal nach.
happystudent schrieb:
ScottZhang schrieb:
Mit default_traits meine ich einfach nur deine Abhängigkeit des Types T2 von T. Das müsstest du selber natürlich noch vorgeben. Du kannst das auch fest in die Klasse verbasteln ohne zweiten Templateparameter.
Aber ein Typ T ist ja nicht unbedingt abhängig von T2 bzw. soll explizit nicht abhängig davon sein. Wenn ich etwas wie std::tuple etwa habe:
// std::tuple<T1, T2, T3, T4>
std::tuple<int, const char*, double, char> t(1, "test", 2.5, 'c');
Wieso sollte hier T2 (ein string) auch nur irgendwie mit T1 (einem int) zusammenhängen? Dabei ist die kilometerlange template-Argument Liste doch völlig unnötig und redundant, da durch die Argumente des Konstruktors bereits festgelegt ist welchen Typ T1 bis T4 haben sollen. Viel schöner wäre doch:
// std::tuple<T1, T2, T3, T4>
std::tuple t(1, "test", 2.5, 'c');
Mit auto und einer make_xyz Funktion kommt man dem schon recht nahe, das ist ja letztendlich auch nur ein Workaround. Besser wärs doch wenn das direkt von der Sprache unterstützt werden würde, oder?
Ganz ehrlich, über die Abhängigkeiten deiner Typen musst du dir schon selbst im klaren sein, nicht wir. Bei Tupel hast du auch N Parameter für den Typen. Das wolltes du ja gerade nicht. Also muss sich T2 ja wohl irgendwie aus T ergeben oder nicht. Ansonsten wäre ja doch wieder die explizite Abhängigkeit deienr Klasse von T2 gegeben. Ne Hilfsfunktion wie make_tupel, die die Typededuktion nutzt um die Tipparbeit zu sparen kannst du dir auch ganz leicht schreiben.
happystudent schrieb:
Mit auto und einer make_xyz Funktion kommt man dem schon recht nahe, das ist ja letztendlich auch nur ein Workaround.
Das ist kein Workaround. Ein Workaround für was denn?