Funktionsaufruf abhängig vom Datentyp
lima-city → Forum → Programmiersprachen → C/C++ und D
aufrufen
brauch
code
compiler
datum
fehler
frage
funktion
jemanden
methode
nachschlagen
parameter
problem
rest
sol
spezialisierung
stichwort
string
test
zahl
-
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? :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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 -
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; }
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage