#define und Zahl zu einem String zusammensetzen



  • Warum muss es denn ein #define sein. Warum reicht dir nicht eine Funktion?



  • Dies war nur ein einfaches Beispiel.
    Habe noch viele Variablen. Diese sind alle als defines deklariert. Nun haben diese aber alle eine unterschiedliche Anzahl an Platzhaltern. Über eine Funktion wären die Anzahl an Parametern aber fest.
    Dann bräuchte ich ja mehrere Funktionen. Klar die möglichkeit mit einer Elipse würde noch bestehen. Dies wollte ich halt eher vermeiden. Dachte halt es gibt eine einfache Lösung mit Makros



  • hottehüh schrieb:

    name.Format(_T("MValue%d"),i);
    MyDunction(name);
    

    Genau, das ist die Lösung...

    Alternativ kannst Du natürlich den Format-String und die Variablen auch direkt in die Funktion reingeben und es in der Funktion erst zusammenbauen... siehe auch "printf"... da wird ja genau das gemacht...



  • hottehüh schrieb:

    Dies war nur ein einfaches Beispiel.
    Habe noch viele Variablen. Diese sind alle als defines deklariert. Nun haben diese aber alle eine unterschiedliche Anzahl an Platzhaltern. Über eine Funktion wären die Anzahl an Parametern aber fest.
    Dann bräuchte ich ja mehrere Funktionen. Klar die möglichkeit mit einer Elipse würde noch bestehen. Dies wollte ich halt eher vermeiden. Dachte halt es gibt eine einfache Lösung mit Makros

    Variablen als defines? Ich glaube da verwechselst du was. defines sind für konstante Textersetzungen gedacht und nicht für Variables.

    Im Übrigen können Funktionen auch eine variable Anzahl von Parametern besitzen.



  • Variablen als defines? Ich glaube da verwechselst du was. defines sind für konstante Textersetzungen gedacht und nicht für Variables.

    Ja es sind Textersetzungen. Das sind nur Variablennamen aus einem anderen System die ich einlesen muss. Da habe ich mich falsch ausgedrückt.

    Im Übrigen können Funktionen auch eine variable Anzahl von Parametern besitzen.

    Ja. Habe ich auch kommentiert:

    Klar die möglichkeit mit einer Elipse würde noch bestehen. Dies wollte ich halt eher vermeiden.



  • Wenn es nicht geht, dann muss ich wohl doch eine Funktion mit Variabler Anzahl an Argumenten verwenden.

    Könte mir da jemand noch ne Hilfe zu den Makros va_list, va_arg, irgendwie komme ich mit den Anleitungen die es im Netz gibt nicht zurecht.

    Meine Funktionsrumpf sollte ja nun so aussehen:

    CString BuildVarName(const CString &name, ...)
    {
       CString varname = "";
    
       va_list marker;
    
       va_start( marker, ) //hier fehlt das zweite Argument
    
       //bei der Schleife komm ich auch nicht zurecht.
       while()
       {
    
       }
    
        va_end( marker );
    
        return varname;
    
    }
    

    Könntet ihr mir noch etwas auf die Sprünge helfen.


Anmelden zum Antworten