Dlaczego jest wyjście z tej code:specjalizująca szablon funkcji dla typów referencyjnych
#include <iostream>
template<typename T> void f(T param)
{
std::cout << "General" << std::endl ;
}
template<> void f(int& param)
{
std::cout << "int&" << std::endl ;
}
int main()
{
float x ; f (x) ;
int y ; f (y) ;
int& z = y ; f (z) ;
}
jest
Ogólne
Ogólne
Ogólne
Trzeci jest surprizing ponieważ funkcja została dokładnie wyspecjalizowana lub int&
Edycja: wiem, że przeciążenie może być właściwym rozwiązaniem. Po prostu chcę poznać logikę, która za tym stoi.
Może dlatego, const int & korzystne jest int &? – Septagram
@Septagram: const int &? –
Nie wiem, czy to pomaga, ale jeśli zmienisz szablon, aby zaakceptować "T &", wtedy zarówno 'f (y)' jak i 'f (z)' wywołują wersję 'int &'. –