Datentyp zur Laufzeit ermitteln



  • Ich habe folgende Funktion basierend auf templates, die immer den maximalen Typ zum aktuell verwendeten Datentyp nutzen soll:

    template <class T>
    inline T minArrayValue(T * Array, int iArraySize)
    {
    	T min = std::numeric_limits<double>::max(); 
    	for (int i=0; i < iArraySize; i++)
    	{			
    		min = minValue(min, Array[i]);
    	}
    	return min;
    }
    

    nur wie ermittle ich zur Laufzeit den Datentyp?



  • Google mal nach "type_info" und "Run time Type Information"



  • pospiech schrieb:

    nur wie ermittle ich zur Laufzeit den Datentyp?

    template< class T >
    void wer_bin_ich_questionmark( T &X )
    {
    	string str = "Ich bin";
    
    	if ( typeid( X ) == typeid( double ) )
    	{
    		str += " double.\n";
    	}
    
    	if ( typeid( X ) == typeid ( char ) )
    	{
    		str += " char.\n";
    	}
    
    	if ( typeid( X ) == typeid ( string ) )
    	{
    		str += " string.\n";
    	}
    
    	cout << str;
    }
    
    int main()
    {
    	double d;
    	char c;
    	string s;
    
    	wer_bin_ich_questionmark( d );
    	wer_bin_ich_questionmark( c );
    	wer_bin_ich_questionmark( s );
    	return 0;
    }
    

    🙂



  • bist du sicher, dass du das erst zur laufzeit wissen musst?

    pospiech schrieb:

    Ich habe folgende Funktion basierend auf templates, die immer den maximalen Typ zum aktuell verwendeten Datentyp nutzen soll:

    was ist ein maximaler typ?

    T min = std::numeric_limits<double>::max();
    

    sowas wäre besser:

    T min = std::numeric_limits<T>::max();
    

    oder verwende statt deiner funktion gleich std::min_element .

    @proggingmania: genau so etwas will man doch mit templates vermeiden...



  • queer_boy schrieb:

    @proggingmania: genau so etwas will man doch mit templates vermeiden...

    ohh. 😃



  • Man braucht aber auch gar nicht den maximalen Wert für den Typ. Nimm als Anfangswert für min einfach das erste Array-Element (für size>0).


Anmelden zum Antworten