什么是空模板参数<>在创建对象的同时?

时间:2015-07-14 11:03:40

标签: c++ templates c++11

这是一些有效的语法:

<>

它是如何工作的,它会自动推断出对象模板吗?为什么有必要在类型的末尾写<>?我可以不删除user.php?rquest=add_user并且它会是相同的吗?

2 个答案:

答案 0 :(得分:21)

通常,当第一个和后一个参数或仅参数具有默认模板参数(如果它是一个整数的类型或值)时,可以使用它并且它可以工作。另一种情况是存在模板参数包时它是空的。

仍需要<>将其标识为模板类型。

在此case the type is declared as;

template <class RealType = double>
class uniform_real_distribution;

因此,模板类RealType的默认uniform_real_distributiondouble。它等于std::uniform_real_distribution<double>

参考C++ WD n4527,§14.3/ 4(模板参数)

  

使用模板参数包或默认模板参数时, template-argument 列表可以为空。在这种情况下,空<>括号仍应用作 template-argument-list 。 [示例:

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
     

- 结束示例]

答案 1 :(得分:5)

该类具有以下声明

template<class RealType = double>
class uniform_real_distribution;

如您所见,它具有double

类型的默认模板参数

所以这个宣言

std::uniform_real_distribution<> randomizer(0, 100);

相当于

std::uniform_real_distribution<double> randomizer(0, 100);