В чем разница между шаблоном функции и функцией шаблона?

В чем разница между шаблоном функции и функцией шаблона?


person Community    schedule 13.07.2009    source источник
comment
Связано: stackoverflow.com/questions/879535/   -  person avakar    schedule 13.07.2009


Ответы (4)


Термин "шаблон функции" относится к типу шаблона. Термин "функция шаблона" иногда используется для обозначения того же самого, а иногда для обозначения функции, созданной из шаблона функции. Этой двусмысленности лучше всего избежать, используя «шаблон функции» для первого и что-то вроде «экземпляр шаблона функции» или «экземпляр шаблона функции» для второго. Обратите внимание, что шаблон функции не является функцией. То же различие применяется к «шаблону класса» и «классу шаблона».

Из этого часто задаваемых вопросов (архив)

person Tim Sylvester    schedule 13.07.2009
comment
Согласен с общими моментами, однако я не согласен с часто задаваемыми вопросами о том, что экземпляр шаблона функции является термином, который следует использовать. ИМХО специализация шаблона функции ближе к стандартной терминологии. Также возникает вопрос о том, как вызывать функции и классы, которые сами по себе не являются шаблонами, но являются членами шаблона класса. У них много общего в поведении с шаблонами функций, но неправильно называть их шаблонами функций. - person Richard Corden; 13.07.2009
comment
У меня сложилось впечатление, что когда люди говорят о специализации шаблона, они имеют в виду явно определенную частичную или полную специализацию (очевидно, всегда полную в случае шаблона функции), а не функцию/класс, который компилятор создает из определения шаблона. Я часто видел, как экземпляр используется для последнего. Относится ли стандарт к последнему как к специализации? - person Steve Jessop; 13.07.2009
comment
ИМХО, такое имя, как A ‹ int ›, является специализацией независимо от контекста. Он может использоваться как часть явного создания экземпляра или явной или частичной специализации. Но я также считаю, что это специализация, в которой он используется для объявления объекта, например: A‹int› * a;. Что касается стандарта, 14.2/1 описывает, как на специализацию шаблона (14.7) можно ссылаться с помощью грамматического термина 'template-id', а 14.7 включает неявные экземпляры. - person Richard Corden; 13.07.2009
comment
Спасибо за это, я стараюсь не злоупотреблять стандартной терминологией. - person Steve Jessop; 14.07.2009
comment
Ссылка мертва. - person 김선달; 18.06.2020

Comeau Computing (создатель C++ Comeau Compiler) имеет FAQ на своем сайте с ответом на этот вопрос:

В чем разница между шаблонной функцией и шаблоном функции?

С уважением,
Ованес

person ovanes    schedule 13.07.2009

Шаблон функции - это правильная терминология (шаблон для создания экземпляров функций).

Шаблонная функция является разговорным синонимом.

Так что никакой разницы нет.

person Marc Mutz - mmutz    schedule 13.07.2009

Функция, сгенерированная компилятором из шаблона функции (общая функция) для указанного типа данных, называется функцией шаблона. Пример: приведенный ниже код называется шаблоном функции, поскольку он является шаблоном для функции.

template<T>
T doubleVal(T a){
  return a+a;
 }
int main(){
  cout<<doubleVal<int>(5)<<endl;
}

Когда мы скомпилируем этот код, компилятор напишет функцию для int, взяв ссылку из функции шаблона. Эта функция известна как функция шаблона.

person Mukesh    schedule 27.10.2018