2012-11-10 8 views
5

C++ 1x unterstützt literale Suffixe (cmp. Z. B. http://ecn.channel9.msdn.com/events/GoingNative12/GN12Cpp11Style.pdf). Ich benutze gcc 4.7 und möchte einige Einheiten für unser System vorstellen. Vor allem die Hälfte unseres Codes verwendet Grad und die andere Hälfte Radiant (aufgrund von verschiedenen 3rd-Party-Bibliotheken), und natürlich ist dies immer eine ständige Ursache für Fehler. In der Lage sein, z.B. "Radianwinkel = 90 °;" wäre so hilfreich.C++ verfügbar "Literal Suffix-Code" für Einheiten

Ich habe untersucht, wie dies zu implementieren ist und es sieht machbar aus, aber es wird einige Zeit dauern, um alles richtig zu machen. Also frage ich mich, ob es eine fertige/getestete Implementierung gibt, die bereits all das implementiert, was verwendet werden kann (keine Notwendigkeit für jeden C++ - Entwickler, dies wieder zu implementieren, oder?). Neben rad/deg suche ich Längenmaße (mm, cm, m). Ich habe bereits gegoogelt, aber nichts brauchbares gefunden.

Kennt jemand eine Implementierung von z.B. das SI-System, das verwendet werden kann?

+1

[Diese Referenz] (http://en.cppreference.com/w/cpp/language/user_literal) hat ein paar Beispiele. –

+0

Danke, aber ich suche keine Beispiele/Referenzen. Ich bin zuversichtlich, dass ich eine ganze Reihe von Literalen und Umsetzungsoperatoren implementieren könnte, um meine Bedürfnisse zu erfüllen. Dies wird jedoch einige Zeit in Anspruch nehmen, um alle Anwendungsfälle zu testen. Da das SI-System für alle gleich ist, würde ich annehmen, dass Hunderte von C++ - Entwicklern so etwas tun - also hoffe ich, dass jemand eine saubere und getestete Implementierung durchgeführt hat, die "nur" verwendet werden kann. Ich will das Rad nicht neu erfinden. – Frankie

+3

+1 für nicht das Rad neu erfinden wollen. Dies ist ** nicht ** was Sie suchen, aber Boost bietet eine templated Version unter [Boost.Units] (http://www.boost.org/doc/libs/1_52_0/doc/html/boost_units.html). Ich bin gespannt welche anderen Antworten du bekommen wirst. – Ali

Antwort

2

Verwenden Sie boost.units.

Sie erhalten den erwarteten Nutzen: in der Lage zu sein, sicher mit Metriken umzugehen, die in verschiedenen Einheiten ausgedrückt werden.
Die Syntax mit Boost-Einheiten ist nicht so schlimm:

quantity<length> dx(2.0*meter); 
+1

Es gibt keinen Grund, dass boost.units nicht verwendet werden kann _with_ user-defined suffixes ... – bames53

+0

@ bames53 Das wollte ich nicht sagen. Es ist nur, dass boost.Units keine UDL bereitstellt. – log0

+0

Sie erwähnen, dass ich die gleichen Vorteile bekomme. Unter der Annahme, dass ich eine C++ 11x-Implementierung finde, warum sollte Boost bevorzugt werden? – Frankie