MAP auf Pointer auf Funktion und Pointer auf Variable
-
Hallo,
vielleicht habt ihr eine Idee:
Ich habe mehrere Funtkionen, zu jeder Funktion eine Variable und eine Bezeichnung der Funktion.
Jeder Funktion wird ein vector<T> übergeben. Es sind Templatefunktionen.
Es gibt eine Funktion, die die Templatefunktionen aufruft Zeitdauer misst und die Zeit in einer übergebenen Variable speichert.Wie stelle ich das nun am besten an?
Ich hatte an map<void ,double > und map<string,map> oder so gedacht. das zweite mach natürlich keinen sinn. Will ja nicht für jede Funktion eine map erzeugen.
Als Schema: string, void ()(<vector<T>), double
Erstes soll die Bezeichnung der Funktion sein, das zweite ein Pointer auf die Funktion mit dem übergebenen Vektor vom Typ T und das letzte soll die zugehörige Variable sein, in der die Zeit gespeichert werden soll.
Hatte an Structs gedacht, aber die Funktionieren nicht mit Templateklassen.Ich hoffe ich konnte mich verständlich ausdrücken und ihr habt eine Idee für mich.
Gruß
-
JohKa schrieb:
Hatte an Structs gedacht, aber die Funktionieren nicht mit Templateklassen.
What. Warum?
template<typename Type> struct Function{ void(*function)(std::vector<Type>); double time_elapsed; }; std::map<std::string, Function<T>> my_functions_map;
-
Danke für die schnelle Antwort:
Bei deinem Vorschlag erhalte ich:
error C2133: my_function_map: unbekannte Größe
error C2998: std::map<std::string, Function<T>> my_functions_map; Kann keine Vorlagedefinition sein.
-
Ich glaube Du hast da noch ein paar Lücken was Dein Wissen von Templates angeht.
Tmusst Du natürlich durch den entsprechenden Typen den Du benutzen willst ersetzen.Folgender Code
#include <iostream> #include <vector> #include <map> template<typename Type> struct Function{ void(*function)(std::vector<Type>); double time_elapsed; }; int main(){ std::map<std::string, Function<int>> my_function_map; return 0; }kompiliert einwandfrei.
-
Und zeige mal ein Stück Code wo es kracht.
-
Danke nochmal!
Hatte einen Gedankenfehler. Nun klappts.
Aber wie fülle ich die jetzt mit inhalten?my_functions = {STRING,{funktion,variable}}?
-
my_function_map["Zeichenkette"] = Function-Instanz;
-
JohKa schrieb:
my_functions = {STRING,{funktion,variable}}
Wenn Dein Compiler
std::initializer_list<>versteht, dann ja.
-
Guten Morgen,
ich habe den struct nun so gelöst:
template <class T> struct Function { void (*pFunc)(vector<T>); string exp; double *time_elapsed; };Also keine Map mehr genommen sondern alle Informtionen im Struct gespeichert.
Initialisiert habe den dann wie folgt:Function<int> functions[] = { { func1 , "Funktion 1" , &varFunc1 }, { func2 , "Funktion 2" , &varFunc2 }, };Jedoch erhalte ich den Fehler: "Keine Instanz von Funktionsvorlage func1 stimmt mit den erforderlichen Typen überein.
Implementierung von func1,2... ist:
template <class T> void func1 (vector<T> &data) { ... }Hat jemand eine Idee für mich?
-
Du deklarierst in deinem struct, dass deine Funktion einen vector per Value nimmt:
void (*pFunc)(vector<T>);, aber deine Funktion nimmt einen vector per Referenz:
void func1 (vector<T> &data) {
-
Ok, dass das so einfach ist, hätte ich nicht gedacht!!! Vielen Dank!