Blog der Heimetli Software AG

Benutzerdefinierte Literale in C++

Die meisten neuen Features von C++ sind ausgesprochen nützlich und erleichtern die Codierung. Bei den benutzerdefinierten Literalen bin ich mir allerdings nicht sicher, ob sie wirklich sinnvoll sind ...

Gedacht sind sie für selbst definierte Literale wie 12_km oder 5_sec, also für Angaben mit Masseinheiten. Es muss nicht unbedingt ein Integer sein, Doubles, Characters und Strings sind ebenfalls erlaubt. Von selbst definierten Einheiten verlangt der Standard, dass sie mit einem _ anfangen.

Für meine Applikationen sehe ich eigentlich keine Anwendung der Masseinheiten, aber es hat mich sofort gereizt, meine Grusel++ of the month Serie zu erweitern.

Für die Masseinheiten gibt einen neuen Operator mit dem Namen operator"". Er hat zwei verschiedene Ausprägungen, die Raw-Form und die Cooked-Form. Das folgende Programm benutzt die Raw-Version.

Der Return-Typ wird durch den Programmierer festgelegt, als Argument bekommt der Operator einen const char *. Als Argument wird das ganze Literal übergeben, also der Wert mit der angehängten Masseinheit.

/*****************************************************/
/*                                                   */
/*                                 File: Literal.cpp */
/*                                                   */
/*  Demonstrates the use of "user defined literals"  */
/*  ===============================================  */
/*                                                   */
/*  V1.00  17-AUG-2014 Te                            */
/*                                                   */
/*  Compiled with g++ 4.7.2 and tested on Knoppix    */
/*                                                   */
/*****************************************************/

#include <iostream>

using namespace std ;

/****************************************/
 string operator"" _hw( const char *str )
/****************************************/

{
   return "Hello World !" ;
}

/**********/
 int main()
/**********/

{
   cout << 1_hw << endl ;

   return 0 ;
}

Sie können Literal.cpp hier herunterladen