что происходит, когда перегруженный метод имеет класс шаблона в качестве параметра

0

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

Я хочу знать, что на какой основе выбирается конкретный метод?

Теги:
templates
method-overloading

2 ответа

1
Лучший ответ

Функция без шаблона лучше сочетается с шаблоном функции.

Ссылка (C++ Проект стандарта N3337):

13.3.3 Наилучшая жизнеспособная функция

...

Учитывая эти определения, жизнеспособная функция F1 определяется как лучшая функция, чем другая жизнеспособная функция F2, если для всех аргументов я ICSi (F1) не является худшей последовательностью преобразования, чем ICSi (F2), а затем

...

- F1 - это функция без шаблона, а F2 - специализированная функция шаблона, или, если это не так,

- F1 и F2 - специализированные шаблоны функций, а шаблон функции для F1 более специализирован, чем шаблон для F2 в соответствии с правилами частичного упорядочения, описанными в 14.5.6.2.

0

Его очевидное поведение, фактическое совпадение параметров с формальным. В качестве шаблона компилятор не знает, какой тип T, также вызов функции шаблона имеет другой синтаксис.

  • 0
    Итак, во время выполнения Во-первых, он находит прототип с точным типом данных. если это не находит это тогда, это идет для типа параметра T. правильно?
  • 0
    неправильно, если параметры совпадают с вызываемой функцией (существует слабая проверка типов между числовыми типами), во время выполнения даже компилятор не знает, что T goanna будет int, вы должны явно упомянуть T is int в вызове функции.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню