Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-03-2012
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
template typename falla

Hola compañeros, vengo de nuevo con problemas, esta vez más relacionados con c++ estándar.

Estoy intentando utilizar la característica de templates. Tengo la siguiente función:

Código:
        template <typename T>
        int valida( T value, int var2 )
        {
                if( typeid(T) == typeid(int))
                {
                    if( value < var2 )
                    {
                         ...
                    }    
        }
    }
Esto me salta en tiempo de compilación y me dice textualmente:
Código:
[BCC32 Error] E2094 'operator<' not implemented in type 'string' for arguments of type 'int'
¿Por qué me interpreta "value" como un string si es de tipo indefinido (template) ?? ¿qué hago mal?

1000gracias
__________________
http://www.qdsSoftware.com
Responder Con Cita
  #2  
Antiguo 08-03-2012
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
He recibido dos respuestas del post a mi correo, sin embargo esas respuestas no están en el foro... ¿se trata de un caso de poltergeist foril?
__________________
http://www.qdsSoftware.com
Responder Con Cita
  #3  
Antiguo 08-03-2012
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
Al parecer ya tengo la solución a mi problema, aunque no la entiendo.

Como hacía llamadas a esa función dentro de la propia clase, me la interpretaba directamente como de tipo "string"

tan sólo he tenido que separar el método "validar" (que me daba igual que fuera estático) en una clase a parte
y ahora no da ningún problema

en fín... ya se sabe, la brujería de la programación
__________________
http://www.qdsSoftware.com
Responder Con Cita
  #4  
Antiguo 08-03-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por waremovil Ver Mensaje
He recibido dos respuestas del post a mi correo, sin embargo esas respuestas no están en el foro... ¿se trata de un caso de poltergeist foril?
No debería hacerse eso, ¿son respuestas de usuarios de clubdelphi?, serán novatos y seguramente no saben cómo funcionan unos foros.
Responder Con Cita
  #5  
Antiguo 08-03-2012
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
sí algo así será
__________________
http://www.qdsSoftware.com
Responder Con Cita
  #6  
Antiguo 08-03-2012
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
Por cierto, respecto a los templates, ya tengo el problema. Yo estaba usando comparaciones tratando por igual strings, ints, floats, dates etc... y en tiempo de compilación entra, pero en linkado, como es lógico, no lo acepta

he tenido que hacer una especialización parcial, algo así como una sobrecarga de template,
de modo que quede una función para int,float,date y otra distinta para string

gracias de todas formas

salu2
__________________
http://www.qdsSoftware.com
Responder Con Cita
  #7  
Antiguo 08-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Yo estaba usando comparaciones tratando por igual strings, ints, floats, dates etc... y en tiempo de compilación entra, pero en linkado, como es lógico, no lo acepta
Hola waremovil.

Realmente no entiendo tu planteo, precisamente el beneficio de template es que permite utilizar el mismo código con diferentes tipos de datos.

Por ejemplo, la función min, así declarada:
Código:
template<typename T>

T min(T x, T y)
{
  return(x < y) ? x : y;
}
Nos permite hacer:
Código:
{
AnsiString s1="Pedro", s2="Ana";
int i1=51, i2= 33;
char c1='X', c2='F';
...
 min(s1, s2);
 min(i1, i2);
 min(c1, c2);
 ...
Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 08-03-2012 a las 17:12:29.
Responder Con Cita
  #8  
Antiguo 08-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo.

A menos que quieras evaluar, dentro de la función, el tipo de los argumentos por que existe una operación que no puede ser aplicada a determinado tipo, en ese caso:
Código:
#include<typeinfo.h>

template<typename T>

T fun(T a, T b) {
  if(typeid(T) == typeid(int))
    return a * b;  /* no aplicable al tipo AnsiString */
  if(typeid(T) == typeid(AnsiString))
    return a + b;
  ...
}
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 09-03-2012
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
Thumbs down

Hola, hasta donde he podido comprobar eso no es cierto cuando los operadores no son compatibles
por ejemplo

Código:
template <typename T>
bool func(T a, T b){
  if (a > b) return false;
  return true; 
}
esto sería válido para int, float, char y cualquier tipo que implemente el operador ">"

pero si en alguna parte del código llamas a la función definiéndola como "string" entonces
tendrás errores en tiempo de linkado porque string no acepta el operador ">"

la solución que he hecho es una pequeña sobrecarga del template, uno para todos los tipos simples y otra para string

Yo también pensaba como tú , pero el compilador me lo tira cuando linko
__________________
http://www.qdsSoftware.com
Responder Con Cita
  #10  
Antiguo 09-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola waremovil.

Basándome en la función de tu mensaje, hice esta prueba y ejecuta correctamente:
Código:
template <typename T>
bool func(T a, T b){
  if (a > b) return false;
  return true; 
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
String a= "DOS", b="UNO";

 if ( a < b) ShowMessage("a es menor"); 
 if(func(a,b))
   ShowMessage("true");
 else
   ShowMessage("false");
}
La verdad, me tiene intrigado el error que mencionas, estaría bueno ver un ejemplo en el que te lo produce. ¿ Será por la versión de Builder ?

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 09-03-2012 a las 14:46:33.
Responder Con Cita
  #11  
Antiguo 11-03-2012
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
hola ecfisa, a mi también me intriga... mañana hago la prueba y salimos de dudas

yo uso Codegear RAD Studio XE

un saludo
__________________
http://www.qdsSoftware.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Template de Proyectos PaFernan99 Varios 9 16-09-2008 14:37:08
Template & Ajax Rony Díaz PHP 6 19-12-2007 14:44:30
Delphi for PHP Template Rony Díaz PHP 2 10-07-2007 16:07:39
Ayuda con las "Template" de BDS 2006 Jesús Pena Varios 2 18-04-2007 13:58:18
Como hacer uso de asp en un template de intraweb? JoelCarlos Internet 0 01-09-2005 18:11:46


La franja horaria es GMT +2. Ahora son las 12:52:08.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi