用户定义类型上的空尖括号 < >对于C++模板中已知的空角括号 ,只有2个用例,它们遇到的是:

用户定义类型上的空尖括号 < >对于C++模板中已知的空角括号 ,只有2个用例,它们遇到的是:,c++,c++11,templates,template-specialization,C++,C++11,Templates,Template Specialization,1) 在模板完全专业化期间,例如 template<typename T> class X {}; template<> class X<char> {}; 模板 X类 {}; 模板 X类 {}; 2) 在模板函数调用过程中,可以推断出哪些参数类型,例如 template<typename T> T add(T a, T b); ... add<>(1, 2); 模板 T添加(T a,T b); ... 添加(1,2

1) 在模板完全专业化期间,例如

template<typename T>
class X
{};

template<>
class X<char>
{};
模板
X类
{};
模板
X类
{};
2) 在模板函数调用过程中,可以推断出哪些参数类型,例如

template<typename T>
T add(T a, T b);

...  

add<>(1, 2);
模板
T添加(T a,T b);
...  
添加(1,2);
但这种情况对我来说是全新的,我无法理解这种语法的含义(请查看
rapidxml::xml\u node*
):

classtestwidget:publicgui::Widget
{
公众:
TestWidget(const std::string&name,rapidxml::xml_node*elem);
// ...
};

构造函数参数中的
xml\u节点
类型有什么语义?

还有一个默认模板参数:

template<typename T = char>
class X
{};
模板
X类
{};
所以

X;//X
不是这种情况(默认模板参数,如Jarod42的答案中所示),而是这种语法还可以声明一个可变模板类型的对象,其中包含空的模板参数列表

或者两者兼而有之

#include <iostream>

// default value
template <typename = void>
struct foo
 { };

// variadic list
template <int ...>
struct bar
 { };

// both
template <int = 0, typename ...>
struct foobar
 { };


int main ()
 {    
   foo<>     f;
   bar<>     b;
   foobar<>  fb;
 }
#包括
//默认值
模板
结构foo
{ };
//变量表
模板
结构条
{ };
//两者
模板
结构foobar
{ };
int main()
{    
福福;
b栏;
福巴餐饮;
}
有趣的是,您无法区分大小写和变量声明

X<> x; // X<char> 
#include <iostream>

// default value
template <typename = void>
struct foo
 { };

// variadic list
template <int ...>
struct bar
 { };

// both
template <int = 0, typename ...>
struct foobar
 { };


int main ()
 {    
   foo<>     f;
   bar<>     b;
   foobar<>  fb;
 }