buenas, quiero hacer algo asi:
if( x==char) {..}
else { .. }
como seria? ya que x==char no funciona evidentemente
thanks.
| |||
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 |
| |||
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... |
| ||||
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:
Pero bueno, hay veces que puede ser una buena cosa. En este caso, hay que usar un trait: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) }
Código:
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.#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; } 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 |
| ||||
Respuesta: averiguar de que tipo es "X" ( char, int,..? )
Código:
http://en.wikipedia.org/wiki/Typeid if (typeid(x) == typeid(char))
__________________ ¡Peron cumple, Evita dignifica! VIVA PERON CARAJO |