5

Załóżmy, że mam szablon funkcji gdzie parametr typ jest używany jako typ zwracany tylko:składnia wątpienia dla specjalizujący szablony funkcyjne

template <typename T> 
T foo() 
{ 
    return whatever; 
} 

to co jest poprawna składnia specjalizować tego szablonu funkcji? Wygląda na to, że oba z nich działają:

template <> 
std::string foo() 
{ 
    return whatever; 
} 

template <> 
std::string foo<std::string>() 
{ 
    return whatever; 
} 

Czy jest jakaś różnica między tymi dwoma elementami? Jeśli nie, jaki jest idiomatyczny sposób?

Odpowiedz

1

Kompilator wywnioskuje poprawną specjalizację szablonu na podstawie dostarczonych informacji (tutaj, typ powrotu funkcji).

Tak więc te składnie mają dokładnie to samo zachowanie, z których jedno jest bardziej jednoznaczne niż drugie.

1

W większości przypadków nie ma różnicy między tymi dwoma.

W przypadku przeciążenia kilku funkcji szablonu, druga postać może być potrzebna do usunięcia niejasności, co do przeciążenia, które masz na myśli, aby specjalizować się (prawdopodobnie masz inne problemy, jeśli jesteś w takiej sytuacji, na przykład musisz też być wyraźnie w miejscach połączeń).

+0

W tym przykładzie nie można już wywnioskować argumentu szablonu w witrynach z telefonami. –