#include <iostream>
#include <ostream>
template<typename T>
void Func(const T& val)
{
std::cout << "const T& val\n";
}
void Func(const char* p)
{
std::cout << "const char * p\n";
}
void Func(std::ostream & (*manip)(std::ostream &))
{
std::cout << "ostream\n";
}
int main()
{
Func(std::endl);
Func("aaa");
}
Osservazione:Come la funzione template sceglie i parametri?
1> Senza void Func(std::ostream & (*manip)(std::ostream &))
, la linea Func(endl);
causerà errori di compilazione. Presumo il problema è dovuto alla funzione modello void Fun(const T& val)
in grado di prendere SOLO un tipo di T
ma un puntatore di funzione.
2> Senza void Func(const char* p)
, la linea Func("aaa");
funziona correttamente. Presumo il motivo è che il tipo T
può essere const char*
.
Domanda> Questi argomenti sono giusti?
Grazie
è la prima funzione davvero chiamato divertente e non Func, o è che un errore di battitura? – happydave
@happydave, ho modificato il codice e la domanda. – q0987
Nel secondo caso senza il sovraccarico 'const char *', 'T' è dedotto come' char [4] '. –