Makro zum Konvertieren einer Liste
-
Hallo,
meine Kenntnisse in C++ halten sich in Grenzen:
ich habe eine textzeile die sieht so aus:
-15, -10, -12.5, 4.99, 5.5Eigentlich will ich aber haben:
PPhysicalQuantity(-15, PPhysicalQuantity::UnitsDegreesCelsius), PPhysicalQuantity(-10, PPhysicalQuantity::UnitsDegreesCelsius), PPhysicalQuantity(-12.5, PPhysicalQuantity::UnitsDegreesCelsius), QList<PPhysicalQuantity>() << PPhysicalQuantity(4.99,PPhysicalQuantity::UnitsPercent) << PPhysicalQuantity(5.5,PPhysicalQuantity::UnitsPercent)
Dafür will ich ein Makro schreiben:
Macro(t1,t2,t3,a1,a2) (PPhysicalQuantity(t1, PPhysicalQuantity::UnitsDegreesCelsius), PPhysicalQuantity(t2, PPhysicalQuantity::UnitsDegreesCelsius), PPhysicalQuantity(t3, PPhysicalQuantity::UnitsDegreesCelsius), QList<PPhysicalQuantity>() << PPhysicalQuantity(a1,PPhysicalQuantity::UnitsPercent) << PPhysicalQuantity(a2,PPhysicalQuantity::UnitsPercent))der Aufruf
cout << Macro(-15, -10, -12.5, 4.99, 5.5) << endl;
produziert aber die fehler
error C2143: Syntaxfehler: Es fehlt ';' vor '<<'
error C4430: Fehlender Typspezifizierer - int wird angenommen.weiß einer warum?
Danke Nerdpol!
-
Du nutzt Markos in C++. In 99% aller Fälle kannst du statt Makros normale Funktionen benutzen.
Mach das hier auch besser.
Wenn du die paar Werte aus der Datei extrahiert bekommst, sollte es kein Problem sein für dich, dir eine Funktion zu schreiben, die diese Werte verarbeitet.
-
In C++98/03 geht folgendes nicht.
QList<PPhysicalQuantity>() << PhysicalQuantity(a1,PPhysicalQuantity::UnitsPercent)
-
Du implizierst, dass das in C++11 geht. Was bedeuten denn die '<<' im Zusammenhang mit solchen Listen und Konstruktoren?
-
<< inseriert einen neuen Listen/Vektoreintrag.
Ein bisschen komisch, denn wenn ich definiere:
Macro(t1,t2,t3,a1,a2) PPhysicalQuantity(t1, PPhysicalQuantity::UnitsDegreesCelsius), PPhysicalQuantity(t2, PPhysicalQuantity::UnitsDegreesCelsius), PPhysicalQuantity(t3, PPhysicalQuantity::UnitsDegreesCelsius), QList<PPhysicalQuantity>() << PPhysicalQuantity(a1,PPhysicalQuantity::UnitsPercent) << PPhysicalQuantity(a2,PPhysicalQuantity::UnitsPercent)
(das selbe wie eben, nur ohne Makroklammern,
Macro(...) PPhysicalQuantity(t1,...
)
dann läufts.
-
okay, aber dann ist das Qt spezifisch, oder?
-
Das die Konstruktorklammer nach dem Makro weggelassen wird?
Ich bin mir sicher dass nicht. Ganz durchgestiegen bin ich aber selbst nicht.
-
Tags bitte und Code, den man nachvollziehen kann.
-
Edit: Nein, das ist falsch, es geht auch mit früheren Standards. (s. u.)
-
Doku sagt mir nicht, dass hier ein Problem mit C++03 entstehen könnte. Die Fehlermeldung passt auch nicht dazu.
-
Können die Template zur Compile-Zeit Einheiten umformen? Beziehungsweise zusammengesetzte Einheiten in ihre beispielsweise SI-Komponenten zerdröseln?
-
das geht ja tatsächlich!
Ich war fest davon überzeugt, das geht erst seit C++11 mit Temporaries. Nehme alles zurück.
-
Sone schrieb:
C++11 mit Temporaries.
Was gabs da Änderungen?
-
padawan11 schrieb:
Sone schrieb:
C++11 mit Temporaries.
Was gabs da Änderungen?
Das ist ja der Witz. Ich weiß, dass Gugelmoser (ein jetzt unregistrierter Benutzer) behauptet hat, die Zeile
std::ostringstream() << foosei erst seit C++11 wohlgeformt, was ich natürlich (
) geglaubt hab'...
Finden kann ich nichts.