【问题标题】:Understanding how the default values of template parameters are declared了解如何声明模板参数的默认值
【发布时间】:2015-05-14 09:06:18
【问题描述】:

http://en.cppreference.com/w/cpp/string/basic_string 的 std::basic_string 文档中,basic_string 类声明如下。

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

但是,在 GCC 和 Visual Studio 中,Traits 和 Allocator 模板参数的默认值并未在类声明中指定。

以下内容来自 GCC 4.9.2 中的 basic_string.h。

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

注意 _Traits 和 _Alloc 模板参数缺少默认值。

我错过了什么?

【问题讨论】:

    标签: c++ templates


    【解决方案1】:

    这些类通常在一百万个地方声明1。这些声明中只有一个会带有默认参数,否则会出错。

    对于basic_string,在libstdc++ 中,默认参数位于bits/stringfwd.h 的前向声明中(其中包括&lt;string&gt; 等):

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

    1 不要按字面意思理解。

    【讨论】:

    【解决方案2】:

    在 Visual Studio 中,它在专业化之前的开头以&lt;xstring&gt; 方式定义:

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

    “普通”字符串类型稍后在 std::string 的 typedef 中定义:

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

    【讨论】:

      猜你喜欢
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      相关资源
      最近更新 更多