На меня ссылалась Явная статья о создании шаблона на cplusplus.com , в которой приведен следующий пример:
template <typename T> class Example
{
public:
Example( T test )
{
_data = test;
}
void setTest(T test)
{
_data = T;
}
private:
T _data;
};
class template Example<int>;
class template Example<float>;
class template Example<double>;
Помимо того, что мне кажется ошибкой, когдаПопытка присвоения типа переменной-члену - _data = T
вместо того, что я предполагаю, должно быть _data = test
- я не понимаю, что именно последние 3 строки объявляют или инструктируют компилятору, точно?
Я знаю, что такое шаблоны, создавал с ними программы и в целом знаю об их создании и специализации.У меня, вероятно, есть некоторые дыры в понимании последних двух, но я, как правило, инструктирую явное создание экземпляра шаблона, используя, например, форму template class Example<int>;
, а не форму, показанную во фрагменте.
Я пытался скомпилироватьфрагмент с использованием g++ -std=c++11 -pedantic
, и он прекрасно компилируется и без предупреждений (я исправил ошибку _date = T
выше первой).
Это произошло после того, как я прокомментировал ответ на связанный вопрос иЯ все еще не уверен, является ли какая-либо из последних 3 строк во фрагменте специализацией или созданием шаблона.
Я также попытался найти соответствующее правило создания грамматики (которое разрешает template
после class
) вчерновик C ++ 11, опубликованный ISO , но с пустыми руками.