wie verbindlich ist std::tr1::array?
-
Hallo C++ Gemeinde
Ist es möglich in derzeit laufenden Projekten die array klasse zu verwenden wenn man ISO C++ konform bleiben möchte?
Ist man immer noch konform wenn man es in templates verwendet worin sich der Datentyp erst zur Kompilierzeit entscheidet?
template<class _DataType> class A: public B<_DataType> { ... array<_DataType,3> sum() const; ... }
-
Kurze Antwort: Ja, man kann Templates so verwenden.
-
wm2 schrieb:
Ist es möglich in derzeit laufenden Projekten die array klasse zu verwenden wenn man ISO C++ konform bleiben möchte?
Sofern du die neue Standardbibliothek von C++0x verwendest, ja. Allerdings verlierst du damit die Abwärtskompatibilität zum momentanen C++-Standard (C++98/03).
Das
array-Klassentemplate ist aber auch Bestandteil des Technical Report 1 (std::tr1::array) und von Boost (boost::array), du benötigst also nicht zwingend einen C++0x-Compiler.wm2 schrieb:
Ist man immer noch konform wenn man es in templates verwendet worin sich der Datentyp erst zur Kompilierzeit entscheidet?
Was heisst denn "erst zur Kompilierzeit"? Vor dem Kompilieren gibt es gar keine Typen. Aber du kannst natürlich
std::arraymit Templates kombinieren.
-
Was du allerdings standardkonform nicht darfst, ist den Bezeichner "_DataType" zu benutzen, weil dieser mit einem Unterstrich gefolgt von einem Großbuchstaben beginnt. Bezeichner dieser Form sind für die Implementation reserviert.
-
seldon schrieb:
Was du allerdings standardkonform nicht darfst, ist den Bezeichner "_DataType" zu benutzen, weil dieser mit einem Unterstrich gefolgt von einem Großbuchstaben beginnt. Bezeichner dieser Form sind für die Implementation reserviert.
Echt? Waren das nicht zwei Unterstriche? Wenn es tatsächlich ein Unterstrich ist... dann gut zu wissen.
-
Alle Namen die mit einem doppelten Unterstrich oder einem Unterstrich gefolgt von einem Großbuchstaben sind reserviert.
Standard Kapitel 17.4.3.1.2
17.4.3.1.2 Global names [lib.global.names]
Certain sets of names and function signatures are always reserved to the implementation:
- Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use.
- Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace. 165- Such names are also reserved in namespace ::std (17.4.3.1).