Hier sind drei Varianten dein Problem zu lösen. Zunächst ist es einfacher und saubrer, wenn du die Zeile
window = new TF1("name", fp, 0, 1, 1);
nur einmal schreibst. fp
ist in dem Fall ein function pointer mit Typ double (*)(double)
(also eine Funktion, die double
zurückgibt und ein double
Argument annimmt).
switch.cpp
ist dann im wesentlichen dein Ausgangsprogramm, aber mit den if..else if
durch das switch
statement ersetzt. Beachte, dass ich darin aber nur den function pointer zuweise und dann erst danach tabulate
aufrufe (was bei dir der TF1-Zeile entspräche).
array.cpp
erstellt ein Array all der function pointers und nutzt dann das numerische Argument als Index. Die function pointers sind jeweils nur 64 bit groß, daher ist das effizient. Ein Array von Fenstern wäre vermutlich nicht so wünschenswert. ^^
map.cpp
macht dann schlussendlich das, was du in Python mit dicts machen würdest. dict heißt in C++ map.
Aufrufe:
./switch 1
./switch 2
./switch 3
./array 1
./array 2
./array 3
./map one
./map two
./map three