Я понимаю, что вы не можете частично специализировать шаблон функции, я также понимаю типичную перегрузку функции.Пример правила специализации/перегрузки
Где мне нужна помощь в поиске различий между нижеуказанными функциями foo(). Я ожидаю, что некоторые из них отличаются от синтаксиса точно так же?
Может ли кто-нибудь более осведомленному объяснить каждую функцию, что именно происходит с ней, это специализированная специализация или перегрузка шаблона, и как компилятор C++ определяет, что нужно вызывать?
//(1)
template<typename T>
void foo(T t)
{
cout << "template<T> foo(T) " << endl;
}
//(2)
template<>
void foo<int*>(int* l)
{
cout << "template<> foo<int*>(int*) " << endl;
}
//(3)
template<typename T>
void foo(T* l)
{
cout << "template<T> foo(T*) " << endl;
}
//(4)
void foo(int* l)
{
cout << "normal overload foo(int*) " << endl;
}
int main()
{
int x = 0;
foo(x);
foo(&x);
return 0;
}
Программа выхода:
template<T> foo(T)
normal overload foo(int*)
@ Rakete1111 вы правы. Ред. – Jordan