Fragen zu Templates

Hi!

Vielleicht etwas dumm die Frage, ABER folgendes:

Zum Thema, wieso Templates besser, als bspw. Funktionen sind, kommt immer wieder das Argument auf, dass sie generisch seien, also dass das Template mit unterschiedlichen Datentypen arbeiten kann.

Wenn ich ein Template bspw. so deklariere:

template <typename T, uint8_t blib, uint16_t bla>
class MyClass {
    // ...
};

Kann diese auch folgende Objekte übernehmen, die so instanziiert sind? Wenn ja, wieso? Ich habe meine beiden Variablen anders definiert. Wozu müssen diese dann überhaupt definiert werden? Fragen über Fragen.

MyClass<double, 2, 20> obj2; 
MyClass<string, 3, 30> obj3;

Danke!

Hallo makkustm

Werf mal einen Blick in das Schlaubuch.

https://www.learncpp.com/cpp-tutorial/function-templates/

Es werden damit 3 Parameter definiert.
Der Erste typename T.
Der Zweite uint8_t.
Der Dritte uint16_t.

Zweiter und Dritter Parameter sind festgelegt. Erster Parameter kann beliebig sein, damit wird genau genommen nur der Datentyp festgelegt den die "Parametervariable" mitbringt. In deinem Bsp. erst Fließkomma und dann String. Ohne dem Typname könntest du nicht 2 Instanzen anlegen mit unterschiedlichen Datentyp des ersten Parameters.

template <typename T, uint8_t blib, uint16_t bla>
class MyClass {
    T var {0};
    // ...
};

Um das irgendwie zu nutzen könntest mittels Typname eine private Variable mit genau dem gleichen Datentyp anlegen wie der Übergabeparameter/Variable hat. Da muss man wissen was man macht.

Ich sehe keine Variablen.
Template Parameter sind in der Form konstant, als dass sie zur Kompilezeit aufgelöst werden.
Sie sind alles andere, nur keine Variablen.

im Prinzip ja, aber es müssen bekannte Typen sein.
string (lit.) ist nicht bekannt und kompiliert daher auch nicht (was du selber auch feststellen hättest können, würdest du einen ganzen Sketch rundherum machen).

Oh, stimmt.

Hast du den jetzt Klarheit in deiner Frage erlangt?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.