Funktion f(bool p1, bool p2) als f(p1=true, p2=false); aufrufen?



  • Badestrand schrieb:

    mumumms schrieb:

    enums?

    👍

    👍



  • Eine anständige IDE sollte da reichen. Nur um das zu kompensieren würde ich nicht boost benutzen.. 🙄


  • Administrator

    Auch mit anständiger IDE würde ich Enums nehmen oder sogar Typen. Ziemlich gutes Beispiel, wo man auch Typen einsetzen kann:

    Date date(Month(10), Day(1), Year(2004));
    // Statt:
    Date date(10, 1, 2004);
    

    Für bool Argumente reicht aber meistens ein Enum.

    Grüssli



  • Oder doch lieber die Boost-Keule rausholen:

    Date date(month = 10, day = 1, year = 2004); //ok
    Date date(day = 1, month = 10, year = 2004); //auch ok
    

  • Administrator

    life schrieb:

    Oder doch lieber die Boost-Keule rausholen:

    Die Verwendung mag zwar schön und flexibel aussehen mit Boost, aber die Realisierung finde ich äusserst hässlich. Solchen Code, der dabei entsteht, kann man nur äusserst schlecht lesen. Ich mein schau dir nur mal das Beispiel an:

    #include <boost/parameter/name.hpp>
    
    namespace graphs
    {
      BOOST_PARAMETER_NAME(graph)    // Note: no semicolon
      BOOST_PARAMETER_NAME(visitor)
      BOOST_PARAMETER_NAME(root_vertex)
      BOOST_PARAMETER_NAME(index_map)
      BOOST_PARAMETER_NAME(color_map)
    
      BOOST_PARAMETER_FUNCTION(
          (void),                // 1. parenthesized return type
          depth_first_search,    // 2. name of the function template
    
          tag,                   // 3. namespace of tag types
    
          (required (graph, *) ) // 4. one required parameter, and
    
          (optional              //    four optional parameters, with defaults
            (visitor,           *, boost::dfs_visitor<>())
            (root_vertex,       *, *vertices(graph).first)
            (index_map,         *, get(boost::vertex_index,graph))
            (in_out(color_map), *,
              default_color_map(num_vertices(graph), index_map) )
          )
      )
      {
          // ... body of function goes here...
          // use graph, visitor, index_map, and color_map
      }
    }
    

    *würgt und kotzt* 😉

    Grüssli



  • Ich möchte nicht wissen, wie das ganze aussieht, wenn das durch den Präprozessor durch ist. -.-



  • visual studio 2008 zeigt bei mir, wenn ich mit dem mauszeiger über einen Funktionsaufruf fahre immer die Deklarations dieser Funktion an



  • Hab mal ausprobiert, wie hässlich so eine Date Funktion wirklich ist:

    #include <iostream>
    #include <boost/parameter/preprocessor.hpp>
    #include <boost/parameter/name.hpp> 
    
    BOOST_PARAMETER_NAME(day)
    BOOST_PARAMETER_NAME(month)
    BOOST_PARAMETER_NAME(year)
    
    BOOST_PARAMETER_FUNCTION((void), print_date, tag, 
    						 (required (day,(int))(month,(int))(year,(int))))
    {
    	std::cout << day << "." << month << "." << year << std::endl;
    }
    
    int main() {
    	print_date(_day=13, _month=6, _year=2009);
    	print_date(_month=6, _day=13, _year=2009);
    }
    

    Ist schon etwas gewöhnungsbedürftig.. 🤡



  • Manchmal finde ich Boost schon etwas übertrieben. Wird hier für jede Parameterkombination eine eigene Funktion erzeugt?

    Nur weil es einem zu unflexibel ist, sich an eine Parameterreihenfolge zu halten? Das Problem habe ich oft, dann setze ich die gewünschten Parameter halt per Setter. Viel flexibler, kein unnötiger Code-Bloat oder intransparente Präprozessormagie. Dafür mehrere Zeilen, das ist natürlich schon ein Problem.

    Edit: Das ist meine persönliche Meinung.



  • Nexus schrieb:

    Nur weil es einem zu unflexibel ist, sich an eine Parameterreihenfolge zu halten? Das Problem habe ich oft, dann setze ich die gewünschten Parameter halt per Setter. Viel flexibler, kein unnötiger Code-Bloat oder intransparente Präprozessormagie. Dafür mehrere Zeilen, das ist natürlich schon ein Problem.

    Edit: Das ist meine persönliche Meinung.

    Da bin ich grundsätzlich auch deiner Meinung, allerdings denke ich nicht, dass das wirklich gedacht war produktiv zu nutzen, sondern eher sich mal einer dran gesetzt hat und geschaut hat, ob so etwas möglich ist. (wahrscheinlich nicht zu letzt um den ewigen "C++ ist allen dynamischen Sprachen unterlegen" Diskussionen einhalt zu geben). Ich finds nett zu sehen, dass es geht und in etwa wie, aber mir würde nie im Traum in Sinn kommen das ernsthaft zu nutzen.. 😉
    Das coole daran ist ja, dass zur Laufzeit keinerlei Nachteile dadurch enstehen, dass man eine dynamischere Syntax hat. Und das alleine finde ich schon bemerkenswert.



  • Vielen Dank für die vielen Ideen. Ich hatte gehofft, dass es da schon etwas gibt, etwas neues dafür einbauen, dass als neue Fehlerquelle dienen kann, will ich lieber nicht.


Anmelden zum Antworten