用户定义类型上的空尖括号 < >对于C++模板中已知的空角括号 ,只有2个用例,它们遇到的是:
1) 在模板完全专业化期间,例如用户定义类型上的空尖括号 < >对于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
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;
}