В чем смысл пустой "<>" в использовании шаблона?
В чем смысл строки tokenizer<> tok(s)
в коде ниже? Я знаю, что < > используется во время работы с шаблонами, но в соответствии с моим пониманием < > не должно быть пустым - оно должно содержать определение типа.
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";
}
Ответы
Ответ 1
Это просто означает, что шаблон должен использовать параметры по умолчанию. Например:
template <int N = 10>
class X { };
X<> x; // this is an X<10>
Ясно, что это возможно только тогда, когда все параметры шаблона имеют значения по умолчанию....
Для boost::tokenizer
в частности, шаблон:
template <
class TokenizerFunc = char_delimiters_separator<char>,
class Iterator = std::string::const_iterator,
class Type = std::string
>
class tokenizer;
Ответ 2
Список шаблонов шаблонов может быть пустым, если у вас есть аргументы по умолчанию или у вас есть пакет аргументов, это описано в черновик проекта С++ раздел 14.3
Шаблонные аргументы, которые говорят (внимание мое):
Когда используются шаблоны аргументов шаблона или аргументы шаблона по умолчанию, Список шаблонов может быть пустым. В этом случае empty < > скобки все равно должны использоваться как список шаблонов-аргументов. [Пример:
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
-end пример]
В вашем случае boost:: tokenizer имеет следующие аргументы по умолчанию:
template <
class TokenizerFunc = char_delimiters_separator<char>,
class Iterator = std::string::const_iterator,
class Type = std::string >
который позволяет вашему конкретному делу работать.
Ответ 3
Это означает, что используются аргументы шаблона по умолчанию.
Например, если у вас есть шаблон:
template < typename T = int >
struct A;
то для аргумента шаблона это будет иметь тип int
:
A<> a;