What is the difference between a template class and a class template?
What is the difference between a template function and a function template?
Вопрос: что модифицируется? Вообще говоря, если мы говорим, что-то является «зеленым домом», то объект - это дом, который оказывается зеленым. Имея это в виду, это явно класс:
struct SomeClass {
int i;
};
тогда как это явно шаблон:
template <typename T>
struct cTemplate {
int member;
};
Что это за шаблон? c Образец шаблона класса. В том же духе, это функция:
void foo() {}
и это шаблон:
template <typename T>
T fTemplate(T arg)
{
return arg * arg;
}
Что это за шаблон? fTemplate - это шаблон функции.
Теперь SomeClass является именем класса и, следовательно, позволяет нам писать что-то вроде:
SomeClass sc;
По этим же принципам мы знаем, что можем сделать что-то вроде:
cTemplate<int> cti;
Другими словами, cTemplate также является именем класса. Итак, cTemplate - это класс. Подумайте об этом, это будет эффективно, когда будет создан экземпляр:
template <> struct cTemplate<int> {
int member;
}
Что это за класс? Что ж, вероятно, нет необходимости уточнять, какого рода, но если это так, то может показаться, что cTemplate является классом шаблона. Аналогично с функциями. То есть, если бы вы вызывали fTemplate, например:
fTemplate(99.99);
затем следует, что создается экземпляр функции:
fTemplate<double>(double)
В частности, это:
template <>
double fTemplate<double>(double)
{
return arg * arg;
}
Итак, как и выше, если нажать для какой это функции, то будет справедливо сказать, что это шаблонная функция.
Выше всего сказанного оказывается, что некоторые люди используют шаблонный класс для обозначения того же, что и шаблон класса, поэтому некоторые (другие) люди предпочитают не придавать конкретное значение первому термину.