#c #templates #template-specialization
#c #шаблоны #специализация шаблона
Вопрос:
Это скомпилировано на VS 2008, но похоже на нестандартное использование шаблонов.
template <class T>
class Foo
{
public:
void bar(Foo<int> arg)
{
// do some stuff here
}
// more code ...
};
Есть ли проблема, поскольку специализация шаблона Foo<int>
содержится в определении его собственного класса template?
Ответ №1:
На самом деле это не специализация — вы просто говорите, что функция принимает параметр типа Foo <int>
— тот факт, что функция сама по себе является членом класса Foo, на самом деле не важен. И да, это законно.
Комментарии:
1. Тем не менее, он использовал правильный термин.
Foo<int>
является ссылкой на специализацию шаблона класса (генерируемая специализация при создании экземпляра, но может быть ссылкой на явную специализацию). Но я подозреваю, как и вы, что он имел в виду явные специализации, но случайно перепутал это с общим термином специализации шаблона. Вот что мы получаем из сложных определений C 🙂2. @Johannes Вы, конечно, правы, но я думаю, что большинство людей назвали бы это (возможно, ошибочно) созданием экземпляра. В любом случае, я использую слово «действительно» по назначению, чтобы охватить все базы 🙂