Variadic Function ohne Parameteranzahl
-
Vektor<5, double> i<3>(array);Das will ich dem Nutzer (was eigentlich nur ich sein werde) nicht antun

-
Wurstinator schrieb:
Vektor<5, double> i<3>(array);Das will ich dem Nutzer (was eigentlich nur ich sein werde) nicht antun

Was soll das darstellen?
-
Shade Of Mine schrieb:
Wurstinator schrieb:
Vektor<5, double> i<3>(array);Das will ich dem Nutzer (was eigentlich nur ich sein werde) nicht antun

Was soll das darstellen?
Einen Fehler. Er will sich selbst keine Fehler antun.
-
Shade Of Mine schrieb:
Wurstinator schrieb:
Vektor<5, double> i<3>(array);Das will ich dem Nutzer (was eigentlich nur ich sein werde) nicht antun

Was soll das darstellen?
Den Konstruktor?!
Ich hab es nur kurz gegooglet und nicht ausprobiert; wenn es falsch ist, hättest du mir ja einfach die richtige Variante sagen können.
-
Wurstinator schrieb:
wenn es falsch ist, hättest du mir ja einfach die richtige Variante sagen können.
Also ich könnte es nicht. Ich kann zwar Template-Konstruktoren definieren, aber ich weiß nicht, wie man sie explizit aufruft. Geht das überhaupt?
#include <iostream> struct Foo{ template<typename T> Foo(T t){ std::cout<<sizeof(T)<<' '<<t<<'\n'; } }; int main() { Foo f1('a'); Foo f2(3.14); <short>Foo f3(5);//?? Foo<short> f3(5);//?? Foo f3<short>(5);//?? Foo f3(5)<short>;//?? }
-
volkard schrieb:
Geht das überhaupt?
Nein, bei Template-Konstruktoren müssen die Templateparameter aus den Funktionsargumenten hergeleitet werden können.
-
Achso, der Compiler schließt also automatisch auf die Größe des Arrays? Das ist ja nett

Und was war jetzt hiermit:
non-POD + ellipse ist sowieso UB.
Wieso sorgt das für "UB"?
-
Wurstinator schrieb:
Wieso sorgt das für "UB"?
Weil die variable Argumentliste ein C-Sprachmittel ist, das nicht auf die Kopiersemantik von Klassen ausgelegt worden ist. Kopierkonstruktor etc. werden also nicht aufgerufen. Ähnlich wie wenn du versuchst, Klassen mit
memcpy()zu kopieren.
-
Hm, okay.
Aber ich hab die Methoden ja jetzt so geändert, dass die Elemente mit dem Zuweisungsoperator in den Array eingefügt werden. Somit sollte das doch fehlerfrei gehen, oder nicht?
-
Hi,
kann mir jemand erklären, was dieser Teil aus der "fertigen" Vektor-Klasse macht ?template<unsigned int DIM, class VTYPE> template<class any> Vektor<DIM, VTYPE>::Vektor(any* x, ...) { va_list args; va_start(args, x); for (unsigned int n = 0; n < DIM; n++) values[n] = va_arg(args, VTYPE); va_end(args); }Gruss
-
Was genau meinst du?
Der Konstruktor nimmt eine beliebige Anzahl von Parametern und nimmt diese dann als Vektor-Werte.