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.


Anmelden zum Antworten