Konstruktor
-
Wenn ich folgendes mache
struct S { template<class T> S (T const&) { } };
Dann besitzt S ja keinen Konstruktor (eine Template-Funktion ist keine Funktion). Müsste der Compiler also einen standard C'tor und standard Copy-C'tor erzeugen?
-
strukturen haben prinipiel keine strukturen. das haben nur klassen. mit templates kenne ich mich nicht aus.
-
@archivar: Es gibt den Begriff "Struktur" in C++ eigentlich nicht, das Schlüsselwort 'struct' kann genauso vollwertige Klassen definieren wie 'class'. Der Unterschied liegt in den Standard-Zugriffsrechten - bei 'struct' ist alles öffentlich.
Daraus folgt natürlich dass auch 'struct'-Klassen Konstruktoren haben können.
<imho>Eine Template-Funktion ist zwar noch keine Funktion, aber ihre Instanzen sind Funktionen. Auf der Suche nach einem passenden Konstruktor werden auch mögliche Template-Instanziierungen berücksichtigt, damit hat die Klasse einen Konstruktor, so dass der Compiler nicht mehr selbst einen generiert.</imho>
-
Original erstellt von Helium:
Dann besitzt S ja keinen Konstruktor (eine Template-Funktion ist keine Funktion). Müsste der Compiler also einen standard C'tor und standard Copy-C'tor erzeugen?sicher? ich würde sagen S besitzt einen Template Ctor.
Einen Standard Ctor sowie Copy Ctor muss der Compiler bereitstellen...
-
Hallo,
Bashar liegt hier richtig. Es gilt zwar, dass ein Template-Ctor *niemals* ein Copy-Ctor ist, er kann aber ein vollwertiger Ctor sein und damit wird natürlich vom Compiler *kein* Standardctor mehr generiert.
-
OK, danke.