Funktionen als Parameter und Rückgabewerte
-
Es geht um folgendes:
Ich möchte eine Funktion randDouble(int min, int max) schreiben, die eine Funktion (int -> double) zurückgibt.Ich möchte eine zufällige Matrix erzeugen mit:
Matrix <double> mat = Matrix <double>(10,10, randDouble(-1,1));Der Konstruktor sieht wie folgt aus:
template<class T> Matrix<T>::Matrix(int dim1, int dim2, T (*rnd)(int)) { dim1_ = dim1; dim2_ = dim2; entries_ = new T*[dim1_]; for (int i = 0; i < dim1_; i++) entries_[i] = new T[dim2_]; for (int i = 0; i < dim1_; i++) { for (int j = 0; j < dim2_; j++) { entries_[i][j] = rnd(rand()); } } }Ich weiß nicht, ob sowas überhaupt mit C++ geht. Mit Haskell würde ich einfach eine Funktion f :: Int -> Int -> Int -> Float schreiben und nur 2 Parameter beim Aufruf angeben. Aber bei C++ hab ich keine Ahnung, wie die Implementierung von
double (*randDouble(int min, int max))(int)aussehen muss.
-
Kleine Ergänzung:
Es macht mehr Sinn, wenn die Parameter vom Typ double sind, aber dadurch ändert sich das Problem nicht:
double (*randDouble(double min, double max))(int)
-
Man würde hier eher eine Instanz einer Generator-Klasse übergeben. Denn das Problem ist, dass du zusätzlich zum Funktionszeiger ja noch die Parameter brauchst.
-
Ja, ok, das würde gehen, thx, hätte ich auch selbst kommen können.
-
Mit min und max als ints würde es tatsächlich gehen:
template <int min, int max> double randDouble(int) { ... }
-
std::function<double()> make_me_a_generator_in_range(int min, int max)