kostenloser Webspace werbefrei: lima-city


Funktionsaufruf abhängig vom Datentyp

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    mitti

    mitti hat kostenlosen Webspace.

    Hab eine Frage:
    Ich habe eine Klasse und der Datentyp für meine Daten darin werden mittels template "übergeben".

    Habe jz sowas:

    size_type get_max_size_data() {
         if (typeid(data_type) == (typeid(int))) {
             return max_digits_int(m_p_root);
         } else if (typeid(data_type) == (typeid(std::string))) {
             return max_size_string(m_p_root);
         } else {
             return 10;
         }
    }


    Das heißt wenn es ein in ist soll er max_digits_int aufrufen, bei einem string max_size_string und sonst einfach 10 zurückgeben. Aber so funktioniert dass noch nicht so wirklich, da er beim compilieren scho einen Fehler ausgibt, da ich in der "..._int"-Funktion etwas mache, dass mit strings nicht funktioniert.

    Kann mir jmd helfen? :)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ich hoffe ich habe dich richtig verstanden. Mir scheint, du ziehst das viel zu kompliziert auf. Daher mal schematisch, wie ich das lösen würde:
    #include <iostream>
    
    int meineFunktion( int variable ) {
    	std::cout << "Eine Zahl!\n";
    	//berechne was du willst
    	return 0;
    }
    
    int meineFunktion( std::string variable ) {
    	std::cout << "Ein String!\n";
    	//berechne, was du willst
    	return 0;
    }
    
    int main( int argc, char ** argv ) {
    	int a;
    	std::string str;
    
    	meineFunktion( a );
    	meineFunktion( str );
    	return 0;
    }

    Definiere dir einfach 2 mal die Funktion get_max_size_data() und als Parameter nimmst du dann verschiedene Datentypen. Den Rest erledigt der C++ Compiler dann für dich.

    Stichwort zum Nachschlagen, falls dir das nicht ganz klar ist: Polymorphismus

    Beitrag zuletzt geändert: 16.5.2011 17:30:50 von bladehunter
  4. Autor dieses Themas

    mitti

    mitti hat kostenlosen Webspace.

    ja, so wäre es ja nicht so schwer. das problem ist, dass ich das für die schule brauch und ich es eig scho in der klasse lassen sol usw. aber egal, habe jz eine andere lösung, dass es auch ungefähr funktioniert. zwar habe ich damit die aufgebenstellung nicht ganz erfüllt, aber macht nichts ;)

    Danke auf jeden fall :)

    --> closed
  5. Falls es doch noch jemanden interessiert:

    Für Templates gibt es zusätzlich zum Überladen noch Spezialisierungen. Damit kann man für bestimmte Datentypen spezielle Implementierungen einer Methode vorsehen. Das sieht dann folgendermaßen aus:
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    template <typename T>
    class Test
    {
    private:
        T value;
    
    public:
        Test(T val):value(val){}
        T getValue() const
        {
            return this->value;
        }
    
        void setValue(T val)
        {
            this->value = val;
        }
    
        size_t getMaxSizeData();
    };
    
    // allgemeiner Fall
    template <typename T>
    size_t Test<T>::getMaxSizeData()
    {
        return 10;
    }
    
    // Spezialisierung für int
    template <>
    size_t Test<int>::getMaxSizeData()
    {
        return (1u << 31)-1;
    }
    
    // Spezialisierung für string
    template <>
    size_t Test<string>::getMaxSizeData()
    {
        return this->value.max_size();
    }
    
    
    int main()
    {
        Test<string> t1("Hallo");
        Test<int> t2(12);
        Test<double> t3(3.1415);
    
        cout << t1.getMaxSizeData() << endl;
        cout << t2.getMaxSizeData() << endl;
        cout << t3.getMaxSizeData() << endl;
    
        return 0;
    }
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!