Foros del Web » Programación para mayores de 30 ;) » C/C++ »

averiguar de que tipo es "X" ( char, int,..? )

Estas en el tema de averiguar de que tipo es "X" ( char, int,..? ) en el foro de C/C++ en Foros del Web. buenas, quiero hacer algo asi: if( x==char) {..} else { .. } como seria? ya que x==char no funciona evidentemente thanks....
  #1 (permalink)  
Antiguo 17/10/2009, 17:41
 
Fecha de Ingreso: octubre-2009
Mensajes: 103
Antigüedad: 14 años, 6 meses
Puntos: 2
averiguar de que tipo es "X" ( char, int,..? )

buenas, quiero hacer algo asi:

if( x==char) {..}

else { .. }


como seria? ya que x==char no funciona evidentemente


thanks.
  #2 (permalink)  
Antiguo 17/10/2009, 18:30
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
De acuerdo Respuesta: averiguar de que tipo es "X" ( char, int,..? )

Hola,

No es exactamente lo que preguntas pero lo mas parecido es conocer si un dato es un número o una letra, así:

char dato='1';

isdigit(dato) -> te devuelve un número diferente de cero si se trata de un número


char dato='A';

isalpha(dato) -> te devuelveun número diferente de cero si se trata de una letra


Espero te sea de ayuda.
__________________
En programación hay mil y un formas de hacer lo mismo...
  #3 (permalink)  
Antiguo 17/10/2009, 19:10
 
Fecha de Ingreso: octubre-2009
Mensajes: 103
Antigüedad: 14 años, 6 meses
Puntos: 2
Respuesta: averiguar de que tipo es "X" ( char, int,..? )

Hola, no me referia a eso, seria mas bien esto:

char dato='AA';

isCHAR(dato)? -> SI

int dato=32

isCHAR(dato)? -> NO


eso es lo que me gustaria comprobar, si una variable ha sido declarada como CHAR o como INT


en realidad es para un template

tengo metodo( pila<T> x ) , y me gustaria saber si esa T es un char o si no.... pero vamos pa no liarnos mejor fijarnos en lo de isCHAR(dato)? que puse antes
  #4 (permalink)  
Antiguo 18/10/2009, 08:31
 
Fecha de Ingreso: mayo-2009
Mensajes: 13
Antigüedad: 15 años
Puntos: 0
Respuesta: averiguar de que tipo es "X" ( char, int,..? )

Si necesitas saber si se declaró como char o como int, simplemente bastaría con un sizeof supongo.


Probá viendo la función sizeof, comparando los tamaños.. una cosa asi:

if (x==sizeof(char))

Lo otro que se me ocurre es que uses clases y sobrecarga, y si le pasas un int haga algo y si le pasas un char haga otra cosa...
  #5 (permalink)  
Antiguo 19/10/2009, 04:32
Avatar de r0d
r0d
 
Fecha de Ingreso: noviembre-2007
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 3
Respuesta: averiguar de que tipo es "X" ( char, int,..? )

El c++ (supongo que hablamos de c++ porque veo que usas template y tal) tiene un problema con la "reflexion" (no sé como se dice en español), cosa que hacen muy bien lenguaje como C# y java. La razon es por ganar (o no perder) en rapidez de ejecution: en c++, la zona de memoria alocada no tiene el tipo del objeto almacenado.

Entonces, no hay niguna manera "nativa" de hacer esto, hay que hacer trampa, y todas son peligrosas.

La verdad es que, "normalmente", esta situacion deberia occurir nunca. Deberia... en teoria, pero en la "vida real", ocurre mucho. Ocurre mucho porque el paradigma objeto es dificil, pero cuando occure esto, 99% de las veces, es un error de diseño.

La mejor manera de hacer es un poco complicada. Consiste en usar el paradigma traits. Me explico:

Tenemos el codigo siguiente:
Código:
template<typename T>
void f( const std::list<T> & miLista )
{
// segun el tipo de T, voy a hacer algo distinto
// aqui se vee muy bien el error de diseño: el principio y la razon de ser de une argumento template es de manegar la lista si preocuparse del tipo de los elementos)
}
Pero bueno, hay veces que puede ser una buena cosa. En este caso, hay que usar un trait:
Código:
#include <iostream>
#include <list>
using namespace std;

template <typename T>
struct IsChar  // eso es el trait
{
	static const bool value = false;
};

template <>
struct IsChar <char> // especialisacion de template
{
	static const bool value = true;
};

template<typename T>
void f( const list<T> & myList )
{
	if ( IsChar<T>::value == true )
		cout << "is char" << endl;
	else
		cout << "is not char" << endl;
}

int main()
{
	list<int> intList;
	list<char> charList;
	f( intList );
	f( charList );

	cout << "end" << endl;
	cin.get();
	return 0;
}
Es la unica buena manera de hacer, pero claro que es un poco complicado. Para entender lo que hace este codigo, tienes que compilarlo en modo debug y seguir paso a paso.

Sino, existen trampas horribles (por ejemplo usando RTTI y reinterpret_cast<>) pero prefiero no hablar de esto... solo pensar en esto me disgusta ya...
__________________
Alicia: Sólo quiero saber que camino debo tomar.
Gato risón: Pues... depende mucho de donde quieras ir.

Mi página web
  #6 (permalink)  
Antiguo 20/10/2009, 07:47
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: averiguar de que tipo es "X" ( char, int,..? )

Código:
if (typeid(x) == typeid(char))
http://en.wikipedia.org/wiki/Typeid
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:09.