C++ позволяет писать общие функции с помощью шаблонов. А также функция перегрузки функций.
Я написал следующую программу:
#include <iostream>
using namespace std;
template <typename T>
void test(T a)
{
cout<<"using template";
}
void test(int a)
{
cout<<"using int";
}
int main()
{
test(10);
return 0;
}
это:
using int
Я хочу знать, что на какой основе выбирается конкретный метод?
Функция без шаблона лучше сочетается с шаблоном функции.
Ссылка (C++ Проект стандарта N3337):
13.3.3 Наилучшая жизнеспособная функция
...
Учитывая эти определения, жизнеспособная функция F1 определяется как лучшая функция, чем другая жизнеспособная функция F2, если для всех аргументов я ICSi (F1) не является худшей последовательностью преобразования, чем ICSi (F2), а затем
...
- F1 - это функция без шаблона, а F2 - специализированная функция шаблона, или, если это не так,
- F1 и F2 - специализированные шаблоны функций, а шаблон функции для F1 более специализирован, чем шаблон для F2 в соответствии с правилами частичного упорядочения, описанными в 14.5.6.2.
Его очевидное поведение, фактическое совпадение параметров с формальным. В качестве шаблона компилятор не знает, какой тип T, также вызов функции шаблона имеет другой синтаксис.