C++11: type-safe printf



  • Aber das Resultat ist das gleiche: Code kompiliert nicht, wenn Bedingung nciht erfüllt.



  • Nathan schrieb:

    Aber das Resultat ist das gleiche: Code kompiliert nicht, wenn Bedingung nciht erfüllt.

    Nö.
    Mit enable_if aka SFINAE kann man Overloads deaktivieren ohne einen Fehler zu bekommen.
    Man kann den "geenableten" Code also quasi selektiv einblenden. Also quasi "wenn nicht stimmt dann to so als ob's nicht da wäre".

    Ganz was anderes als zu sagen "wenn nicht stimmt dann Fehler".



  • hustbaer schrieb:

    Nathan schrieb:

    Aber das Resultat ist das gleiche: Code kompiliert nicht, wenn Bedingung nciht erfüllt.

    Nö.
    Mit enable_if aka SFINAE kann man Overloads deaktivieren ohne einen Fehler zu bekommen.
    Man kann den "geenableten" Code also quasi selektiv einblenden. Also quasi "wenn nicht stimmt dann to so als ob's nicht da wäre".

    Ganz was anderes als zu sagen "wenn nicht stimmt dann Fehler".

    Ja, das ist mir klar.
    Ich ging davon aus, dass Sone sein requires Makro wie sonst häufig auch genutzt hat*, indem es dort einfach nur alleine steht und dafür sorgt, dass der Code nicht kompiliert.

    *Korrigier mich, wenn ich falsch liege, habe das aber so in Erinnerung.



  • Ich bin wie immer ein wenig zu schnell, natürlich ist das so kein SFINAE. 🙂

    Mir kann keiner weismachen, dass das noch jemand lesen kann 😮

    Deswegen versuche ich eine kleine Makro-Lib zu schreiben, die solche Parser einfacher zu schreiben macht.



  • Makro-Lib

    Ich dachte, dass die Allgemeinheit mittlerweile erkannt hat, dass Makros eher schlecht sind.



  • vertippt... sorry



  • Mit dem aktuellen lässt sich folgendes schreiben - eine TMP-Funktion, die einen String nach einem Zeichen aufteilt:

    DECLARE_TOKENIZER()
    
    SPEC_CH() :
    	COND< ch == split_ch,
    		  name<INSERT_TOKEN(const_string<current_string...>), split_ch, const_string<>, STRING_INAVAIL()>,
    		  name<TOKEN_LIST(), split_ch, const_string<current_string..., ch>, STRING_INAVAIL()> > {};
    
    SPEC_CH_END() :
    	COND< ch == split_ch,
    		  INSERT_TOKEN(const_string<current_string...>, const_string<>),
    		  INSERT_TOKEN(const_string<current_string..., ch>) > {};
    

    Lösche ich später alles... sieht schlimmer aus als ohne...



  • knivil schrieb:

    Makro-Lib

    Ich dachte, dass die Allgemeinheit mittlerweile erkannt hat, dass Makros eher schlecht sind.

    Makros haben nen Haufen Probleme. Oder sagen wir Dinge die nicht gut gelöst wurden. Wo man aber drum rum arbeiten kann.
    Von diesen Unschönheiten sind sie aber extrem cool.
    Makros sind eines der Features die mit in C# am meisten abgehen.



  • hustbaer schrieb:

    Makros sind eines der Features die mit in C# am meisten abgehen.

    Ich bin verwirrt: http://stackoverflow.com/questions/709463/c-sharp-macro-definitions-in-preprocessor ... nun ist auch von 2009. Wo gibt es mehr Infos?

    Ich kenne Makrosysteme in C und in Scheme. Obwohl fuer beide der gleiche Name verwendet wird, sind sie dennoch sehr verschieden. Waehrend a) simple Textersetzung ist, ist b) ein vollstaendiges System zur Codegenerierung mit vielen Features. Wo sind Makros von C# einzuordnen?

    PS: Mit 'Makros sind schlecht' bezog ich mich auf Makros in C.



  • https://github.com/bingojamigo/VTMPL

    Da mir das ganze hin und her Kopiere zu viel wurde, habe ich alles in eine winzige Lib gesteckt, fortan werde ich nur die Header einbinden.

    Ich versuche in nächster Zeit mal ts_printf fertig zu machen (mit allen Formatspecifiern).

    Solange wäre Rückmeldung über die Lib nicht schlecht.


Anmelden zum Antworten