c++ - sencillos - ¿Por qué no se pueden sobrecargar las funciones por tipo de devolución?
sobrecarga de operadores relacionales en c++ (5)
Posibles duplicados:
¿Sobrecarga de función por tipo de devolución?
Puzzle: sobrecarga una función de C ++ de acuerdo con el valor de retorno
Porque tengo una biblioteca que expone un montón de funciones en forma de:
bool GetVal();
double GetVal();
int GetVal();
long GetVal();
//So on.
Y ahora tengo que envolver estos. Prefiero no volver a escribir el mismo conjunto de funciones de nuevo. Me gustaría hacer algo como
template<class T>
T GetVal(){}
Pero parece que no puedo hacer que esto funcione. ¿Algunas ideas?
El tipo de retorno de las funciones no es parte del nombre destruido que genera el compilador para identificar de forma única cada función. los
No de argumentos
Tipo de argumentos y
Secuencia de argumentos
son los parámetros que se utilizan para generar el único nombre destrozado para cada función. Es sobre la base de estos nombres destrozados únicos que el compilador puede entender qué función llamar incluso si los nombres son iguales (sobrecarga) .Hombre .....
No puede sobrecargar en los tipos de devolución ya que no es obligatorio utilizar el valor de retorno de las funciones en una expresión de llamada de función.
Por ejemplo, solo puedo decir
GetVal();
¿Qué hace el compilador ahora?
No, no puede sobrecargar según el tipo de devolución.
De los documentos estándar, Sec 13.1.2 ,
- Las declaraciones de funciones que difieren solo en el tipo de devolución no pueden sobrecargarse.
Y con respecto a su biblioteca, cada función puede pertenecer a un espacio de nombres diferente o de lo contrario tampoco es posible.
Puedes probar
-
template <typename T> T GetVal(T) {...}
lugar (utilizando una variable ficticia para realizar la resolución) - Usar conversiones de tipo
O simplemente usa el GetValBool
simplista, etc.
Solo hay una función en C ++ que puede estar sobrecargada por el tipo de retorno, la función especial del operador de conversión implícita, llamado operator T()
(con T
varía).