Ver Mensaje Individual
  #2 (permalink)  
Antiguo 16/10/2014, 09:40
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Hacer que el parámetro de la plantilla no sea un objeto

Los operadores binarios deberían estar declarados como miembros "friend" de la clase afectada. Esto permite, por ejemplo, que las operaciones puedan ser simétricas, es decir, se puedan intercambiar los dos elementos que rodean la operación sin penalizaciones:

Código C++:
Ver original
  1. class POO
  2. {
  3.   friend POO operator+( const POO& ar_poo, int numero );
  4.   friend POO operator+( int numero, const POO& ar_poo );
  5. }
  6.  
  7. POO operator+( const POO& ar_poo, int numero )
  8. {
  9.   // ...
  10. }
  11.  
  12. POO operator+( int numero, const POO& ar_poo )
  13. {
  14.   // ...
  15. }
  16.  
  17. // ...
  18.  
  19. int main( )
  20. {
  21.   POO poo;
  22.  
  23.   // ambas operaciones son válidas:
  24.   poo = poo + 4;
  25.   poo = 4 + poo;
  26. }

Lo anterior es un comentario en voz alta acorde con el tema que estás tocando.

Tu código la verdad es que es un poco confuso... no suele tener demasiado sentido que hagas un template y que dicho template devuelva una versión especializada de sí mismo... los templates, debido a que no se comportan exactamente con lo haría una clase, debes tratarlos con cierto respeto.

Si quieres realizar operaciones que devuelvan templates especializados deberías meter dichas operaciones en funciones externas al template.