Título: C++ Sobrecarga de un operador por medio de un template? Publicado por: GisiNA en 7 Mayo 2017, 22:39 pm Hola a todos!
Estoy tratando de aprender por mi misma los elementos básicos de C++. He buscado en la web una respuesta a la siguiente duda, pero no la he hallado. Quizás este problema no tiene solución. Es posible traspasar un operador a un template de modo tal que el operador no solamente sea sobrecargado sino que a la vez sea reemplazado por otro, y de ese modo no sea necesario tener que repetir el mismo código solo por cambiar la operación, o sea, algo como esto: Código etc.... A continuación les dejo el código. Es uno sencillo del que muchos similares pueden encontrarse en libros y en la web: Código
Ese código me gustaría poder reescribir más o menos como sigue, de modo que sea posible traspasar al templete el operador: Código
Es posible realizar una hazaña de ese tipo? Título: Re: C++ Sobrecarga de un operador por medio de un template? Publicado por: MAFUS en 8 Mayo 2017, 01:04 am Tienes hecha mal la sobrecarga.
A parte de eso puedes hacer uso de algo más primitivo que las plantillas: el preprocesador. Un ejemplo de cómo hacerlo sería así: Código
Título: Re: C++ Sobrecarga de un operador por medio de un template? Publicado por: GisiNA en 8 Mayo 2017, 01:50 am Hola!
Muchas gracias por tu respuesta! Está muy bueno! ;-) Sin embargo, tengo el interés de saber si existe la posibilidad de hacer lo mismo sobrecargando operadores usando templates. Es un interés personal, pues, no he hallado una solución en la web ni en los libros de los que dispongo. Quisiera saber si existe un método de esa manera, o si no es posible hacerlo de esa manera. Mi segunda consulta va en relación al comentario "Tienes hecha mal la sobrecarga." Sobre qué base se levanta tu comentario? Saludos! Título: Re: C++ Sobrecarga de un operador por medio de un template? Publicado por: MAFUS en 8 Mayo 2017, 02:16 am Si miras los errores que lanza el compilador, para el código que tienes, dice:
cpp.cpp:10:47: error: ‘Num Num::operator+(const Num&, const Num&)’ must take either zero or one argument Num operator +(const Num &p1,const Num &p2) Esta sobrecarga, dice el compilador, solo puede tener ningún o un solo argumento. A partir de aquí, una búsqueda rápida por internet te lleva al código correcto para estas sobrecargas. De todas formas no creo que te deje hacer lo que quieres porqué las plantillas son para adaptar las variables y lo que buscas es adaptar el nombre de un método. Título: Re: C++ Sobrecarga de un operador por medio de un template? Publicado por: GisiNA en 8 Mayo 2017, 08:14 am Bah... a mi me compila muy bien y arroja el resultado esperado.
No sabría decirte el porqué en tu caso no compila. Ahora bien, de regreso a mi consulta..., sabes quizás si es posible realizar lo que describo? Saludos! Título: Re: C++ Sobrecarga de un operador por medio de un template? Publicado por: MAFUS en 8 Mayo 2017, 09:32 am No deben existir templates para operadores. El hecho es que una sobrecarga de operadores, a vistas de código intermedio, son funciones y no tipos de datos. Los templates existen para adaptar tipos de datos a funciones y hacerlas genéricas. Como tu idea es cambiar a qué función llamar según el operador que quieres pasar la única forma que se me ocurre es mediante el preprocesador.
Título: Re: C++ Sobrecarga de un operador por medio de un template? Publicado por: GisiNA en 8 Mayo 2017, 13:09 pm Ohhhh! Entiendo! Muy buena respuesta!
Gracias!! Título: Re: C++ Sobrecarga de un operador por medio de un template? Publicado por: CalgaryCorpus en 9 Mayo 2017, 06:18 am Una solucion alternativa a usar macros, pero que tampoco es exactamente lo que buscas, es usar functors. Se trata de clases o structs que tienen un metodo operator() y que puede ser redefinido en otras clases. Es eso lo que hice en el codigo que incluyo aqui:
Código
|