C++ “空”是什么意思<&燃气轮机&引用;在模板使用中?

C++ “空”是什么意思<&燃气轮机&引用;在模板使用中?,c++,templates,C++,Templates,下面代码中的标记器tok行是什么意思?我知道在使用模板时会用到它,但根据我的理解,它不应该是空的——它应该包含类型定义 using namespace std; using namespace boost; string s = "This is, a te\x1Dst"; cout<<s<<endl; tokenizer<> tok(s); for(tokenizer<>::iterator beg

下面代码中的
标记器tok
行是什么意思?我知道在使用模板时会用到它,但根据我的理解,它不应该是空的——它应该包含类型定义

    using namespace std;
    using namespace boost;
    string s = "This is, a te\x1Dst";
    cout<<s<<endl;
    tokenizer<> tok(s);
    for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){
        cout << *beg << "\n";
}
使用名称空间std;
使用名称空间boost;
string s=“这是一个te\x1Dst”;

cout这只是意味着模板应该使用默认参数。例如:

template <int N = 10>
class X { };

X<> x;  // this is an X<10> 

这与问题主体关注的“标记器tok的含义”无关,而是针对更一般的问题标题“在模板使用中空的含义是什么?”

正如Shafik首先提到的,
my_template
表单也可以用于指定空的:

//名称空间std{template class tuple;}
std::tuple t;//此元组无法存储任何内容:-。

这意味着使用默认模板参数

例如,如果您有一个模板:

template < typename T = int >
struct A;
当您有默认参数或参数包时,模板参数列表可以为空,这在
14.3
template arguments一节中有介绍,其中说明(我的重点):

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

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
模板类字符串;
String*p;//确定:String
字符串*q;//语法错误
模板类元组;
Tuple*t;//确定:元素为空
元组*u;//语法错误
-[结束示例]

在您的案例中,具有以下默认参数:

template <
    class TokenizerFunc = char_delimiters_separator<char>, 
    class Iterator = std::string::const_iterator,
    class Type = std::string >
模板<
类TokenizerFunc=char\u分隔符\u分隔符,
类迭代器=std::string::const_迭代器,
类类型=标准::字符串>

这允许您的特定案例工作。

正如其他人指出的,当您有默认参数但缺少参数包时,可以使用此选项,我在回答中解释了这一点。
在模板专门化中更常见,但这是一个与您显示的代码不同的用例。它意味着“不同”
A<> a;
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 TokenizerFunc = char_delimiters_separator<char>, 
    class Iterator = std::string::const_iterator,
    class Type = std::string >