Makro: "test" zu test machen



  • Hi

    ich suche eine Möglichkeit, ein in "" stehenden "wert"
    durch ein makro die "" zu entfernen, so das nur der wert übrig bleibt.
    Geht sowas ?

    phlox



  • phlox81 schrieb:

    Hi
    ich suche eine Möglichkeit, ein in "" stehenden "wert"
    durch ein makro die "" zu entfernen, so das nur der wert übrig bleibt.
    Geht sowas ?
    phlox

    mir ist keine bekannt. ich kanns nur andersrum.



  • hm, also meine idee war genial, aber mit makros wohl net zu machen.
    Ich hatte es jetzt erstmal mit int versucht:

    #define NAME(x,y)x##y
    template<class Type, int name>
    class property
    {
    Type NAME(value,name); //dadurch wollte ich das ich die variablennamen über das template verändern kann, klappt aber so nicht.
    public:
    void NAME(Setvalue,name)(Type value){NAME(value,name) = value;}
    Type NAME(Getvalue,name)()const(return NAME(value,name);}
    };
    

    Aber das klappt natürlich nicht, weil der wert erst später da ist, und
    das Makro dann aus NAME(value,name) einfach valuename anstatt z.b. value1 macht.

    phlox



  • Ne, das klappt so nicht - der Präprozessor kümmert sich nicht um Template-Parameter, sondern ersetzt nur #define Makros. Aber was spricht dagegen, wenn alle property<> Objekte die selben Membervariablen verwenden?



  • CStoll schrieb:

    Ne, das klappt so nicht - der Präprozessor kümmert sich nicht um Template-Parameter, sondern ersetzt nur #define Makros. Aber was spricht dagegen, wenn alle property<> Objekte die selben Membervariablen verwenden?

    Das es so nicht klappt, ist mir jetzt auch klar 😉
    War halt ein Denkfehler, kurz vor der Mittagspause kam mir die Idee *g*

    Eigentlich nix, aber meine nächste Idee war:

    class data:public property<Klasse1,"test">,public property<Klasse1, "var">, public property<Counter,"count">
    

    So würden die Getter und Setter geerbt...
    Das ganze soll dann irgendwo parameter auslesen, und der Code wird dann nur
    noch so generiert. Danach gehts durch den compiler, und fertig ist das Skript...

    phlox



  • phlox81 schrieb:

    Eigentlich nix, aber meine nächste Idee war:

    class data:public property<Klasse1,"test">,public property<Klasse1, "var">, public property<Counter,"count">
    

    So würden die Getter und Setter geerbt...

    aber warum strings?

    class data:public property<Klasse1,test>,public property<Klasse1, var>, public property<Counter,count>
    

    naja, fast. muß wohl mehr makro rein.



  • Ich hoffe, dir ist klar, was eine öffentliche Vererbung bedeutet: "ist ein". Alles andere klingt stark nach einem Designfehler.

    (und ich würde die ganzen property's eher als Membervariablen der data-Klasse verwenden)



  • volkard schrieb:

    phlox81 schrieb:

    Eigentlich nix, aber meine nächste Idee war:

    class data:public property<Klasse1,"test">,public property<Klasse1, "var">, public property<Counter,"count">
    

    So würden die Getter und Setter geerbt...

    aber warum strings?

    class data:public property<Klasse1,test>,public property<Klasse1, var>, public property<Counter,count>
    

    Ja, weils schöner ist. Es war nur so ein Gedankengang.
    Ka, aber was ändert das am Makro problem ?
    Wie erzeuge ich dann in property die setter/getter ?



  • CStoll schrieb:

    Ich hoffe, dir ist klar, was eine öffentliche Vererbung bedeutet: "ist ein". Alles andere klingt stark nach einem Designfehler.

    (und ich würde die ganzen property's eher als Membervariablen der data-Klasse verwenden)

    Ja ich weiss. Ich könnts auch private machen, als hat ein, aber die Setter und Getter
    sollten schon public sein.
    Das ich sie nicht als member haben will, ka. Einfach nur faulheit, das ist
    ja nix was dann noch getippt wird, sondern einfach nur von nem Generator ausgespukt.
    Wozu property, wenn ich da nicht gleich die Getter und Setter erzeuge ?

    phlox



  • phlox81 schrieb:

    Ja, weils schöner ist. Es war nur so ein Gedankengang.
    Ka, aber was ändert das am Makro problem ?
    Wie erzeuge ich dann in property die setter/getter ?

    ich fürchte, es geht nicht.
    und sowas

    class data
    {
    	property<Klasse1,test>
    	property<Klasse1,var>
    	property<Counter,count>
    };
    

    ist dir bestimmt zu einfach.



  • volkard schrieb:

    phlox81 schrieb:

    Ja, weils schöner ist. Es war nur so ein Gedankengang.
    Ka, aber was ändert das am Makro problem ?
    Wie erzeuge ich dann in property die setter/getter ?

    ich fürchte, es geht nicht.
    und sowas

    class data
    {
    	property<Klasse1,test>
    	property<Klasse1,var>
    	property<Counter,count>
    };
    

    ist dir bestimmt zu einfach.

    Hm, wenn man das als Macro machen würde, hätte man einen Weg,
    sogar ohne Templates. Ich muss mal überlegen, ob das
    alles so Sinn macht, evtl. gibts ja auch nen anderen Weg.
    Setter und Getter gleich sparen, und alles public machen.
    Naja, alles public vielleicht doch nicht...



  • innerhalb des makros zwischen private und public switchen.

    #define property(type,name)\
    private:\
    	type name;\
    public:\
    	type& get##Name(){\
    		return name;\
    	}\
    private:\
    

    außerdem rproperty für nur lesen und wproperty für nur schreiben und rwproperty für beiden.

    und jetzt kommt der trick: ich kann den getter nicht überschreiben. pech. ich lösche den mist wieder. dein ansatz ist besser. erben und in der basisklasse definieren und man kann überschreiben, wenn der getter anders funktionieren soll.



  • volkard schrieb:

    innerhalb des makros zwischen private und public switchen.

    #define property(type,name)\
    private:\
    	type name;\
    public:\
    	type& get##Name(){\
    		return name;\
    	}\
    private:\
    

    außerdem rproperty für nur lesen und wproperty für nur schreiben und rwproperty für beiden.

    und jetzt kommt der trick: ich kann den getter nicht überschreiben. pech. ich lösche den mist wieder. dein ansatz ist besser. erben und in der basisklasse definieren und man kann überschreiben, wenn der getter anders funktionieren soll.

    Naja, meine Idee mit dem vererben wäre aber nen overhead, wenn als Makro gemacht.

    Ein anderer Ansatz wäre, für das eigentliche Problem einen anderen Weg zu gehen.
    Ich will nen Universalconverter für z.b. csv/tsv dateien schreiben, der dann
    Format1 in Format2 wandelt. Dafür hab ich ne Klassenhierarchie und Polyphormismus.
    Also nix besonderes. Wenn jetzt alle Properties von der selben Basisklasse erben,
    bin ich schon mal den Typen los, und kann einen Getter für alle machen,
    z.b. BaseClass* GetItem(size_t pos)const;
    Die Properties liegen dann in einem vector<BaseClass*>.

    Aber so ein property-template wäre schon ne tolle Sache...

    phlox


Log in to reply