Я создал специальную функцию Шаблон и функцию без шаблона с теми же аргументами. Поскольку эффективно обе эти же функции, я не был уверен, как компилятор C++ будет запускать его, поскольку теперь он имеет две одинаковые функции, один из которых является специализированным шаблоном, а другой - не шаблонным. Я ожидал, что это приведет к ошибке компилятора, поскольку компилятор найдет две функции с одинаковыми параметрами и возвращаемым типом (в этом случае void foo (string)). Но похоже, что версия без шаблона - это та, которая выполняется при вызове. Итак, есть ли приоритет, когда это будет сделано?Шаблоны против похожих функций без шаблона
Пожалуйста, дайте мне знать, если я неправильно понял.
Код:
#include <iostream>
#include <string>
using namespace std;
template<typename T>
void foo(T input)
{
cout <<"Generic Template"<<endl;
}
template<>
void foo<string>(string input)
{
cout <<"String Template"<<endl;
}
void foo(string input)
{
cout <<"String Non-Template"<<endl;
}
int main() {
string input = "abc";
foo(input);
return 0;
}
Обратите внимание, что вы можете сделать 'foo (ввод);' для вызова версии шаблона (или даже 'foo <> (input);') –
Jarod42