Ziffer aus Variablenname extrahieren?

  • Hallo,


    ich versuche seit einiger Zeit, eine Zahl aus einem Variablennamen zu extrahieren. Es funktioniert ohne Weiteres, wenn ich eine bestimmte Variable innerhalb des Hauptprogramms behandele:


    Array erstellen (Könnte auch jede andere Art Variable sein):


    Mat_IO_DP array_temp_20; (Ich benutze numerical recipes)
    --> Aus dem Variablennamen "array_temp_20" versuche ich z.B., die "20" zu extrahieren.


    #define STRING(s) #s
    ........................................


    string matrix_string = STRING(array_temp_20);


    string numbers ="0123456789";


    int pos1 = matrix_string.find_last_of(numbers);


    double last = double((int(matrix_string[pos1]) - 48)); --> gibt mir die "0"


    int pos2 = matrix_string.find_last_of(numbers, pos1 - 1);


    double penultimate = double((int(matrix_string[pos2]) - 48));
    --> gibt mir die "2" usw.


    Das funktioniert Alles, problematisch wird es, wenn ich versuche, das Ganze in eine Funktion zu verpacken. Ich würde es dann gern so aus dem Hauptprogramm aufrufen:


    double temp = get_temp_from_name(array_temp_20);


    mit einem Funktionsprototypen:


    double get_temp_from_name(Mat_IO_DP array_name)


    Das funktioniert nicht, weil die Funktion dann mit dem Namen "array_name" arbeitet und nicht mit dem Namen "array_temp_20", was ich eigentlich versuche. Und in "array_name" ist ja keine Zahl, so bekomme ich auch nichts zurück. Habt Ihr eine Idee? Herzlichen Dank,


    Holger


    P.S.: "48" erscheint aus irgendwelchen Gründen als "4" und ein Smilie, lies also
    "4Smilie" --> "48"

  • Bitte nutze in Zukunft die Code-Tags, dann ist das ganze viel lesbarer und es kommen keine Smilies vor.


    Zu deinem Problem:


    Ich hab zwar keine Lösung, aber ich frage mich warum du wissen musst was für eine Zahl in deinem Variablennamen drin steht. Wenn du Informationen über einen Datentyp während der Laufzeit benötigst, kannst du RTTI (Realtime Type Information) nutzen.

  • Wasserleiche:


    Ich will nicht den Datentyp wissen, sondern mittels einer Funktion aus einem Variablennamen eine Zahl als double herausziehen, also z.B. aus einem Array, das "array_temp_20" heißt, die "20" als double herausziehen.


    Z.B. so: double temp = get_temp(array_temp_20)


    Der Prototyp würde etwa so aussehen:


    double get_temp(array_name)
    .......................

  • Jaja, das ist mir schon klar gewesen. Ich habe deinen ersten Post verstanden. Ich verstehe nur nicht warum du die Zahl aus dem Variablennamen wissen musst.


    Also was ist der Grund, der diese Funktion nötig macht?


    Ich meine, eventuell gibt es einen anderen Weg um deine Aufgabe zu lösen. Denn das was du probierst, ist doch sicher nur ein Workaround für ein bisher ungelöstes Problem.

  • Wasserleiche:


    Ich könnte so halt an eine Funktion, die außer dem Array an sich auch die Temperatur wissen muss, trotzdem nur das Array übergeben und diese Funktion würde dann aus dem Arraynamen die entsprechende Temperatur extrahieren. So, wie ich es jetzt betreibe, übergebe ich eben die Temperatur jedesmal mit. Das ist auch ein Beispiel für einen von Dir angeregten anderen Weg. Ich dachte eben nur, dass man die Information "Temperatur", die ja im Arraynamen enthalten ist, aus diesem herausziehen kann und man sich damit das zusätzliche Angeben einer Temperatur sparen kann.

  • Ok, jetzt versteh ich warum du das machen willst. Aber wenn ich ehrlich bin halte ich das für den unschönsten Weg.


    Du sparst dir ein Integer in einer Struktur oder Klasse, brauchst aber stattdessen Rechenzeit. Ein Integer ist ein primitiver Datentyp, den Speicher würde ich mir wirklich gönnen. Sogar wenn du die Daten über eine Serielle Schnittstelle überträgst, ist das nicht die Welt.


    Alles andere ist viel zu umständlich, nur um die Temperatur nicht extra übergeben zu müssen.

  • Darkanos:


    Vielen Dank für den Tipp. Wenn ich die Experten richtig verstanden habe, ist es wohl leider unmöglich, so etwas zu bewerkstelligen, weil die Variablennamen zur Laufzeit unbekannt sind. Vielen Dank für die Hilfe!


    Wasserleiche:


    Es ist speichertechnisch wirklich kein größeres Problem den Integer mit zu übergeben, ich muss halt nur jedes Array einzeln übergeben und die Temperatur dazuschreiben und kann keine Schleife über die Arrays laufen lassen, die das jeweilige Array nimmt und die Temperatur extrahiert. Du schreibst "Alles andere ist viel zu umständlich", heißt das, es ist doch nicht unmöglich? Ich hatte in anderen Foren die Information bekommen, dass so etwas prinzipiell unmöglich ist, weil die Variablennamen zur Laufzeit unbekannt sind. Stimmt diese Info dann doch nicht so ganz!? Vielen Dank für die Hilfe!

  • Nein nein, ich bin auch der Meinung das es nicht möglich ist. Wollte das nur nicht so deutlich sagen, weil ich mir nicht 100%ig sicher war.


    Aber wenn man sich überlegt, dass die Variablennamen ja nur in deinem Programm stehen, während der Laufzeit aber nur Speicheradressen, Pointer und sonstige sind, wird klar das es nicht gehen kann...