了解如何声明模板参数的默认值
Understanding how the default values of template parameters are declared
在std :: basic_string文档中找到,网址为http://en.cppreference.com/w/cpp/string/basic_string,basic_string类称为如下。
template<
class CharT,
class Traits = std::char_traits<CharT>,
class Allocator = std::allocator<CharT>
> class basic_string;
但是,在GCC和Visual Studio中,在类声明中未指定性状和分配模板参数的默认值。
以下内容来自basic_string.h,来自gcc 4.9.2。
template<
typename _CharT,
typename _Traits,
typename _Alloc
> class basic_string
请注意,_traits和_Alloc模板参数缺乏默认值。
我缺少什么?
这些类通常在百万个地方 1 中声明。这些声明中只有一个会带有默认参数,因为这是一个错误。
对于basic_string
,在libstdc 中,默认参数在bits/stringfwd.h
中的向前声明中找到(<string>
包括在内,除其他外):
template<typename _CharT, typename _Traits = char_traits<_CharT>,
typename _Alloc = allocator<_CharT> >
class basic_string;
1 不要从字面上拍摄。
在Visual Studio中,它在专业化之前以<xstring>
的方式定义:
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;
相关文章:
- 当给定默认值时,为什么此模板参数推导失败
- 如何在C++中提供模板化函数作为另一个函数的参数,默认值?
- 在 c++ 中,如果我创建一个接受一个具有默认值的参数的构造函数 - 它会用作默认(空)构造函数吗?
- 为什么无法在可变参数模板中将尾随模板参数指定为默认值?
- 可变参数模板和具有继承的默认值
- 具有默认值的单个参数构造函数是否与默认构造函数相同?
- 在子类函数覆盖中省略具有默认值的参数
- 函数作为具有默认值的参数
- 具有另一个具有默认值的模板参数的模板推导
- const变量是否可以在具有默认值的参数中赋值(作为可选参数)
- 可以通过常量引用返回默认参数的值吗?
- 对 const 引用参数使用默认值会导致崩溃
- C ,构造器中允许的参考参数默认值
- 是否可以设计一个包含模板参数默认值的类
- 构造函数中参数C++默认值
- 如何设置依赖于其他参数的参数默认值
- QInput对话框参数默认值
- 在函数定义中指定参数默认值会导致错误 C2143:语法错误:'='之前缺少')'
- 内置类型的模板参数默认值
- 是否可以使用构造函数或对象作为其他类方法的参数默认值?