boost gettext bzw format und varadic macro



  • Hallo zusammen.

    Schwieriges Thema. Mal sehen ob mir jemand helfen kann.

    Ich verwende boost:localization und hier die funktionen translate und format um einen string in eine bsteimmte Sprache zu übersetzten und parameter in dieses string hinein zu formatieren.

    hier mal ein beispiel

    string test = (format(translate("Settingsfile not found: '{1}'").str("Domain")) %path).str();
    

    Nun würde ich das ganze über ein Makro machen.

    # FORMATTRANSLATE(msg, ...)
    

    die Anzahl der zu formatierdenden Parameter soll nun variable sein.

    Nun die Frage wie bekomme ich die einzelen Parameter in den format aufruf

    Psuedo code:

    #define FORMATTRANSLATE(msg, ...) (boost::locale::format(boost::locale::translate(msg).str(PROJECT_NAME)) %ARG1 %ARG2 %ARG3 ).str();
    

  • Mod

    Boost.PP ist immer eine Lösung:

    #include <boost/preprocessor/seq/for_each.hpp>
    #include <boost/preprocessor/variadic/to_seq.hpp>
    
    #define CATTER(r, data, elem) data elem
    #define FORMATTRANSLATE(msg, ...) (boost::locale::format(boost::locale::translate(msg).str(PROJECT_NAME)) \
     BOOST_PP_SEQ_FOR_EACH(CATTER, %, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)) ).str();
    


  • Hi Arcoth.

    Vielen Dank für deine Lösung. Hatte nun auch eine Lösung allerdings auwändiger.
    Mit BOOST_PP_CAT UND BOOST_PP_OVERLOAD.

    Was soll CATTER heißen?


Anmelden zum Antworten