macro um chars aus string zur compilezeit zu erhalten



  • ich suche ne möglichkeit um zur compilezeit (mittels macro ? ) aus einem string die chars zu bekommen

    template<int n1,int n2>
    class CFoo
    {
    public:
    };
    
    void bar(const char c1,const char c2)
    {
    }
    
    #define TestMak(x) bar(#x[0],#x[1])
    //#define TestMak(x) CFoo<#x[0],#x[1]> bla;
    
    main
    {
    ...
    	TestMak(TS);
    

    das auskommentierte geht halt nicht, weil arrays nicht zur compilezeit zur verfügung stehen, vielleicht weiß jemand wie das gehen könnte?

    rapso->greets();



  • Wie du richtig erkannt hast, existieren die Strings zur Compilezeit noch nicht. Also wird das wohl kaum gehen.
    (Pointer-Arithmetik funktioniert erst zur Laufzeit, wenn das Programm im Speicher liegt).

    PS: Bist du sicher, daß du mit der Template-Klasse hier richtig bist? C++ liegt eine Etage tiefer.



  • ja, bin mir sicher. da ich das nicht direkt an templates als templateparameter übergeben kann, muss ich ein evil macro nutzen (falls es überhaupt damit geht).

    ich weiß auch dass strings erst zur compilezeit vorhanden sind, aber ich kann den parameter übergeben ohne dass es ein string ist und später ist es im makro möglich mittels # einen string draus zu machen. ich hoffe nun einfach, dass es noch ne möglichkeit gibt diesen parameter in chars zu zerlegen.

    rapso->greets();



  • rapso schrieb:

    ja, bin mir sicher. da ich das nicht direkt an templates als templateparameter übergeben kann, muss ich ein evil macro nutzen (falls es überhaupt damit geht).

    Deswegen gehört die Frage trotzdem eher ins C++ Board als ins C Board 😉

    ich weiß auch dass strings erst zur compilezeit vorhanden sind, aber ich kann den parameter übergeben ohne dass es ein string ist und später ist es im makro möglich mittels # einen string draus zu machen. ich hoffe nun einfach, dass es noch ne möglichkeit gibt diesen parameter in chars zu zerlegen.

    Makros bewirken nur simple Textersetzungen in deinem Quelltext, d.h. aus

    #define TestMak(x) bar(#x[0],#x[1])
    
    ...
    TestMak(TS);
    

    macht der Präprozessor

    bar("TS"[0],"TS"[1]);
    

    Die Index-Operatoren werden allerdings erst zur Laufzeit auseinandergenommen.

    Es gibt allerdings (je nach Compiler) einen "Charify"-Operator #@, vielleicht kannst du den verwenden.

    PS: Was hast du eigentlich vor?



  • CStoll schrieb:

    Deswegen gehört die Frage trotzdem eher ins C++ Board als ins C Board 😉

    das war nur mein anwendungsbeispiel, die problemstellung ist ein spezielles macro, also c? 🙂

    CStoll schrieb:

    Makros bewirken nur simple Textersetzungen in deinem Quelltext, d.h. aus

    #define TestMak(x) bar(#x[0],#x[1])
    
    ...
    TestMak(TS);
    

    macht der Präprozessor

    bar("TS"[0],"TS"[1]);
    

    Die Index-Operatoren werden allerdings erst zur Laufzeit auseinandergenommen.

    und genau das ist das von mir erwähnte problem.

    Es gibt allerdings (je nach Compiler) einen "Charify"-Operator #@, vielleicht kannst du den verwenden.

    meehr infos, google will da nicht mitmachen 😋

    PS: Was hast du eigentlich vor?

    nur ein paar optimierungen indem unnötige laufzeit operationen zur compilezeit gemacht werden



  • rapso schrieb:

    Es gibt allerdings (je nach Compiler) einen "Charify"-Operator #@, vielleicht kannst du den verwenden.

    meehr infos, google will da nicht mitmachen 😋

    Da brauchst du nur die richtigen Suchworte 😉 -> Preprocessor Operators


Anmelden zum Antworten