tokenizer<> tok(s)
以下代码中line 的含义是什么?我知道在使用模板时会使用<>,但根据我的理解,<>不应该为空 - 它应该包含类型定义.
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";
}
Run Code Online (Sandbox Code Playgroud)
Ton*_*roy 31
它只是意味着模板应该使用默认参数.例如:
template <int N = 10>
class X { };
X<> x; // this is an X<10>
Run Code Online (Sandbox Code Playgroud)
显然,只有当所有模板参数都有默认值时(或者对于没有强制参数的可变参数模板 - 见下文),才有可能....
对于boost::tokenizer
具体而言,模板的:
template <
class TokenizerFunc = char_delimiters_separator<char>,
class Iterator = std::string::const_iterator,
class Type = std::string
>
class tokenizer;
Run Code Online (Sandbox Code Playgroud)
它与您的问题正文所关注的"意义tokenizer<> tok
"无关,而是与模板用法中"更为一般的问题标题"空白的含义"<>"相关联?...
正如Shafik首先提到的,my_template<>
表单也可以与可变参数模板一起使用,例如std::tuple
指定一个空参数包:
// namespace std { template <class ...Args> class tuple; }
std::tuple<> t; // this tuple can't store anything :-.
Run Code Online (Sandbox Code Playgroud)
Sha*_*our 11
该模板参数列表可以是空的,当你有默认参数,或者你有一个参数包,这是包括在草案C++标准的部分14.3
模板参数它说(重点煤矿):
使用模板参数包或默认模板参数时,模板参数列表可以为空.在这种情况下,空<>括号仍应用作模板参数列表.[例如:
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
- 末端的例子]
在您的情况下,boost :: tokenizer具有以下默认参数:
template <
class TokenizerFunc = char_delimiters_separator<char>,
class Iterator = std::string::const_iterator,
class Type = std::string >
Run Code Online (Sandbox Code Playgroud)
这允许您的特定案例工作.
这意味着使用默认模板参数.
例如,如果您有一个模板:
template < typename T = int >
struct A;
Run Code Online (Sandbox Code Playgroud)
那么这将有int
模板参数的类型:
A<> a;
Run Code Online (Sandbox Code Playgroud)