2015-05-14 7 views
5

Im std :: basic_string Dokumentation bei http://en.cppreference.com/w/cpp/string/basic_string wird die basic_string Klasse deklariert wie folgt gefunden deklariert sind.Zu verstehen, wie die Standardwerte der Template-Parameter

template< 
    class CharT, 
    class Traits = std::char_traits<CharT>, 
    class Allocator = std::allocator<CharT> 
> class basic_string; 

jedoch sowohl in der GCC und Visual Studio die Standardwerte für die Merkmale und Allocator Template-Parameter sind nicht in der Klassendeklaration angegeben.

Das Folgende ist aus basic_string.h von GCC 4.9.2.

template< 
    typename _CharT, 
    typename _Traits, 
    typename _Alloc 
> class basic_string 

Beachten Sie das Fehlen von Standardwerten für die Parameter _Traits und _Alloc-Vorlage.

Was fehlt mir?

Antwort

10

Diese Klassen werden normalerweise an einer Million Stellen deklariert. Nur eine dieser Deklarationen enthält die Standardargumente, weil sonst ein Fehler vorliegt.

Für basic_string, in libstdC++, werden die Standardargumente in einer Vorwärtsdeklaration in bits/stringfwd.h gefunden (die durch <string> enthalten ist, unter anderem):

template<typename _CharT, typename _Traits = char_traits<_CharT>, 
      typename _Alloc = allocator<_CharT> > 
    class basic_string; 

Nicht zu wörtlich genommen.

+0

Der Header selbst kann unter https://gcc.gnu.org/onlinedocs/gcc-4.6.3/libstdc++/api/a01077_source.html gefunden werden –

2

in Visual Studio ist es in Weise am Anfang vor der Spezialisierung definiert:

template<class _Elem, 
    class _Traits = char_traits<_Elem>, 
    class _Ax = allocator<_Elem> > 
    class basic_string; 

Die "normalen" String-Typen später in der typedef definiert sind für std::string:

typedef basic_string<char, char_traits<char>, allocator<char> > 
    string; 
typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > 
    wstring; 
Verwandte Themen