typedef in Verbindung mit Templates
-
template< geschwindigkeit < 100, true> struct car { .. Struktur A .. }sowas gibts nicht. wenn der erste Parameter ein int sein soll dann musst du auch einen übergeben. sowas wäre möglich:
template <int geschwindigkeit> struct car<geschwindigkeit, true> { /* ... */ };Schreib am Besten den Code den du wirklich vorfindest und nicht etwas was so ähnlich aussieht, aber keinen Sinn ergibt

MrMilk schrieb:
typedef car<geschwindigkeit,automobil> fahrzeugSowas geht nur wenn geschwindigkeit und automobil vorher festgelegt wurden, z.B.
typedef car<100, true> lahmesauto; typedef car<280, true> flotterflitzer;
-
pumuckl schrieb:
Schreib am Besten den Code den du wirklich vorfindest und nicht etwas was so ähnlich aussieht, aber keinen Sinn ergibt

Klar. Hatte die Datei nicht richtig eingebunden und somit keinen Fehler erhalten. Erst nach den abschicken viel mir auf, dass es noch voller Fehler ist. Werde mich bessern

Aber noch einmal eine Frage:
Also macht das Nutzen eine Typdefinition nur Sinn, wenn ich schon feste Werte angebe, richtig? (Wie in deinem Beispiel)
typedef car<100, true> lahmesauto; typedef car<280, true> flotterflitzer;Wogegen so etwas nicht viel Sinn macht:
typedef car<geschwindigkeit,automobil> fahrzeugMann könnte das Kind noch aus dem Brunnen ziehen mit:
#define geschwindigekeit 100 #define automobil falseViele Grüße
MM
-
MrMilk schrieb:
Mann könnte das Kind noch aus dem Brunnen ziehen mit:
#define geschwindigekeit 100 #define automobil false#defineist doof.const int geschwindigkeit = 100; const bool automobil = false;
-
MrMilk schrieb:
Wogegen so etwas nicht viel Sinn macht:
typedef car<geschwindigkeit,automobil> fahrzeugMacht keinen Sinn und compiliert auch nicht. "typedef xy fahrzeug" heißt, dass du danach fahrzeug als eigenen Typ verwenden kannst. Wenn du das Template nicht explizit instantiierst kann der Compiler nicht wissen welche Instanz von car denn Fahrzeug nun sein soll.
-
pumuckl schrieb:
Macht keinen Sin und Compiliert auch nicht.
Genau das wollte ich hören

Viele Dank an alle für die Hilfe.
-
MrMilk schrieb:
pumuckl schrieb:
Macht keinen Sin und Compiliert auch nicht.
Genau das wollte ich hören

Ohweh, ich hätt das so nicht lesen wollen. Memo an mich selbst: nochmal durchlesen was ich geschrieben hab...
-
Leider muss ich noch einmal dieses alte Thema öffnen.
Momentan macht mir ein typedef zu schaffen. Und zwar sieht es wie folgt aus:
template <int geschwindigkeit> struct car<geschwindigkeit, true> { typedef unsigned int type; }; template <int geschwindigkeit> struct car<geschwindigkeit, false> { typedef int type; };Ist so etwas möglich? Falls ja wie kann ich dann etwas von dem Typ type deklarieren?
Viele Grüße
MM
-
Wieso sollte es nicht?
#include <iostream> template<int, bool> struct Foo // ist bereits <X, false>, wegen der nachfolgenden Spezialisierung { typedef double Type; }; template<int A> struct Foo<A, true> { typedef int Type; }; void bar(double) { std::cout << "double" << std::endl; } void bar(int) { std::cout << "int" << std::endl; } int main() { Foo<234, true>::Type first; Foo<323, false>::Type second; bar(first); // gibt int aus bar(second); // gibt double aus return 0; }Grüssli
-
Danke hast wie immer recht!
Leider bleibt noch eine Anfängerfrage offen. Wieso :: und nicht. ?
Es ist doch kein neuer Namespace, oderßViele Grüße
MM
-
Der Doppelpunkt ist der allgemeine Scope-Operator (egal ob Namensbereiche, Klassen oder Strukturen). Mit dem Punkt-Operator wird nur auf Member (Variablen bzw. Funktionen) zugegriffen.