FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 ) { ... } } } Código:
[BCC32 Error] E2094 'operator<' not implemented in type 'string' for arguments of type 'int' 1000gracias
__________________
http://www.qdsSoftware.com |
#2
|
|||
|
|||
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 |
#3
|
|||
|
|||
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 |
#4
|
||||
|
||||
No debería hacerse eso, ¿son respuestas de usuarios de clubdelphi?, serán novatos y seguramente no saben cómo funcionan unos foros.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#5
|
|||
|
|||
sí algo así será
__________________
http://www.qdsSoftware.com |
#6
|
|||
|
|||
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 |
#7
|
||||
|
||||
Cita:
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; } 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); ...
__________________
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 18:12:29. |
#8
|
||||
|
||||
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; ... }
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#9
|
|||
|
|||
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; } 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 |
#10
|
||||
|
||||
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"); } 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 15:46:33. |
#11
|
|||
|
|||
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 |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Template de Proyectos | PaFernan99 | Varios | 9 | 16-09-2008 15:37:08 |
Template & Ajax | Rony Díaz | PHP | 6 | 19-12-2007 15:44:30 |
Delphi for PHP Template | Rony Díaz | PHP | 2 | 10-07-2007 17:07:39 |
Ayuda con las "Template" de BDS 2006 | Jesús Pena | Varios | 2 | 18-04-2007 14:58:18 |
Como hacer uso de asp en un template de intraweb? | JoelCarlos | Internet | 0 | 01-09-2005 19:11:46 |
|