Technipion
Erfahrenes Mitglied
Hey Leute,
ich bin's mal wieder
Ich bin gerade dabei ein Grundgerüst für evolutionäre Programmierung zu erstellen und habe ein Problem bei meinen Funktoren -.-
Mein Code sah so aus:
Damit habe ich getestet, wie man ein Array von Funktionen erstellt. Später braucht jede "Spezies" ein eigenes Array von verknüpften Funktionen...
Die Funktion times_op benutzt ein Template, da ich den Typ vorher noch nicht genau kenne (könnte int, float oder auch long double sein).
Also wollte ich für mein Array auch ein Template benutzen, da ja jede Einzelfunktion des Arrays zwar den gleichen Typ benutzen wird, aber halt noch nicht feststeht welcher das sein soll.
Also habe ich auch hier ein Template benutzen wollen:
Jetzt Spuckt mir das blöde Teil aber eine Fehlermeldung aus:
>>Fehler: Templatedeklaration von std::function<var(var)>* times<<
Ehrlichgesagt war mir intuitive schon klar, dass das nicht funktionieren kann. Aber wieso nicht?! Kann der die Typen der Arrayelemente nicht einfach zur Laufzeit bestimmen?
Danke schonmal im Voraus.
C++11 ist schon etwas Tolles, aber jede Erweiterung bringt nunmal neue Fehlerquellen mit sich...
Gruß Technipion
PS: Falls ihr wisst wie man ein Array von Funktionen mit unbekannten Typen zur Laufzeit anlegt, könnt ihr das gerne posten!
ich bin's mal wieder

Ich bin gerade dabei ein Grundgerüst für evolutionäre Programmierung zu erstellen und habe ein Problem bei meinen Funktoren -.-
Mein Code sah so aus:
C++:
//üblicher Headerkram
#include <functional> //header for std::function
template<typename var>
std::function<var(var)> times_op(var factor){
return [factor](var x){ return x*factor; };
}
std::function<float(float)> *times;
/* Zeugs */
int main(int argc, char *argv[])
{
using namespace std;
/* noch mehr Gedöns */
times = new function<float(float)> [2];
times[0] = times_op(2.0f);
times[1] = times_op(3.0f);
cout << times[0](3) << endl;
cout << times[1](3) << endl;
times[1] = times_op(4.0f);
cout << times[1](3) << endl;
}
Damit habe ich getestet, wie man ein Array von Funktionen erstellt. Später braucht jede "Spezies" ein eigenes Array von verknüpften Funktionen...
Die Funktion times_op benutzt ein Template, da ich den Typ vorher noch nicht genau kenne (könnte int, float oder auch long double sein).
Also wollte ich für mein Array auch ein Template benutzen, da ja jede Einzelfunktion des Arrays zwar den gleichen Typ benutzen wird, aber halt noch nicht feststeht welcher das sein soll.
Also habe ich auch hier ein Template benutzen wollen:
C++:
//üblicher Headerkram
#include <functional> //header for std::function
template<typename var>
std::function<var(var)> times_op(var factor){
return [factor](var x){ return x*factor; };
}
template<typename var>
std::function<var(var)> *times;
/* Zeugs */
int main(int argc, char *argv[])
{
using namespace std;
/* noch mehr Gedöns */
times = new function<float(float)> [2];
times[0] = times_op(2.0f);
times[1] = times_op(3.0f);
cout << times[0](3) << endl;
cout << times[1](3) << endl;
times[1] = times_op(4.0f);
cout << times[1](3) << endl;
}
Jetzt Spuckt mir das blöde Teil aber eine Fehlermeldung aus:
>>Fehler: Templatedeklaration von std::function<var(var)>* times<<
Ehrlichgesagt war mir intuitive schon klar, dass das nicht funktionieren kann. Aber wieso nicht?! Kann der die Typen der Arrayelemente nicht einfach zur Laufzeit bestimmen?
Danke schonmal im Voraus.
C++11 ist schon etwas Tolles, aber jede Erweiterung bringt nunmal neue Fehlerquellen mit sich...
Gruß Technipion
PS: Falls ihr wisst wie man ein Array von Funktionen mit unbekannten Typen zur Laufzeit anlegt, könnt ihr das gerne posten!

Zuletzt bearbeitet von einem Moderator: