Nar*_*rek 17 c++ templates c++11
这是一些有效的语法:
std::uniform_real_distribution<> randomizer(0, 100);
Run Code Online (Sandbox Code Playgroud)
它是如何工作的,是否自动推导出对象模板?为什么有必要<>
在类型的末尾写?我可以不删除它<>
,它会是一样的吗?
Nia*_*all 22
通常,当第一个和后一个或仅有参数具有默认模板参数(如果它是一个整数的类型或值)时,可以使用它并且它可以工作.另一种情况是存在模板参数包并且它是空的.
将<>
仍然需要将其识别为一个模板类型.
在这种情况下,类型声明为 ;
template <class RealType = double>
class uniform_real_distribution;
Run Code Online (Sandbox Code Playgroud)
因此RealType
模板类的默认值uniform_real_distribution
是double
.它相当于std::uniform_real_distribution<double>
.
参考C++ WD n4527,§14.3/4(模板参数)
使用模板参数包或默认模板参数时,模板参数列表可以为空.在这种情况下,空
<>
括号仍应用作模板参数列表.[ 例如:Run Code Online (Sandbox Code Playgroud)template<class T = char> class String; String<>* p; // OK: String<char> String* q; // syntax error template<class ... Elements> class Tuple; Tuple<>* t; // OK: Elements is empty Tuple* u; // syntax error
- 结束例子 ]
该课程有以下声明
template<class RealType = double>
class uniform_real_distribution;
Run Code Online (Sandbox Code Playgroud)
如您所见,它具有类型的默认模板参数 double
所以这个宣言
std::uniform_real_distribution<> randomizer(0, 100);
Run Code Online (Sandbox Code Playgroud)
相当于
std::uniform_real_distribution<double> randomizer(0, 100);
Run Code Online (Sandbox Code Playgroud)