globale funktionen kapseln´?



  • vielleicht in einen "namespace stringfunktionen" reinstopfen.



  • OT:

    Badestrand schrieb:

    http://www.boost.org/doc/libs/1_40_0/doc/html/string_algo.html (mein Gott, boost ist ja schon bei 4.0, hab doch grad erst geupdated).

    Und ich bin gerade vor einigen Minuten fertig geworden mit 1.39 kompilieren 😡 😃 😞



    1. anonymous namespace
    2. class mit static fkt


  • /rant/ schrieb:

    Badestrand schrieb:

    http://www.boost.org/doc/libs/1_40_0/doc/html/string_algo.html (mein Gott, boost ist ja schon bei 4.0, hab doch grad erst geupdated).

    Und ich bin gerade vor einigen Minuten fertig geworden mit 1.39 kompilieren

    Badestrand meint sicher 1.40 😉

    foo loves bar schrieb:

    1. anonymous namespace
    2. class mit static fkt

    Wieso das? Ich fände eine globale Funktion (evtl. in einem benannten Namensraum) am intuitivsten.



  • Nexus schrieb:

    /rant/ schrieb:

    Badestrand schrieb:

    http://www.boost.org/doc/libs/1_40_0/doc/html/string_algo.html (mein Gott, boost ist ja schon bei 4.0, hab doch grad erst geupdated).

    Und ich bin gerade vor einigen Minuten fertig geworden mit 1.39 kompilieren

    Badestrand meint sicher 1.40 😉

    foo loves bar schrieb:

    1. anonymous namespace
    2. class mit static fkt

    Wieso das? Ich fände eine globale Funktion (evtl. in einem benannten Namensraum) am intuitivsten.

    #include <iostream>
    
    namespace someFunkyName
    {
        void someFunkyFunction()
        {
            std::cout << "::someFunkyFunction" << "\n";
        }
    }
    namespace
    {
        void Sup()
        {
            std::cout << "::Sup" << "\n";
        }
    }
    class staticFoo
    {
        public:
        static void staticBar()
        {
            std::cout << "::bar" << "\n";
        }
    
    };
    
    int main()
    {
        staticFoo::staticBar();
        Sup();
        someFunkyName::someFunkyFunction();
    }
    

    Hast recht, Ich denke dass ich dir hier zustimmen muss. Ich denke auch, dass der Overhead mit einer Klasse & static fkt größer ist als mit einem benannten Namensraum, oder?

    Gruß



  • foo loves bar schrieb:

    Hast recht, Ich denke dass ich dir hier zustimmen muss. Ich denke auch, dass der Overhead mit einer Klasse & static fkt größer ist als mit einem benannten Namensraum, oder?

    Gruß

    Imo geht es nicht um Overhead, sondern das, was am intuitivsten ist. Und ich finde auch, dass eine Funktion in einem Namensraum am klarsten aussägt, was es ist. Warum sollte die Funktion zu einer Klasse gehören? (auch wenn sie statisch ist)

    Wenn ich die Funktion benutzen würde, und die Funktion befindet sich statisch in einer Klasse, dann würde ich mich fragen, warum die nicht frei im namespace ist. Woegegen ich mich nicht fragen würde, warum die Funktion nicht statisch in einer Klasse deklariert ist, wenn sie frei im namespace ist.



  • Man könnte ja auch überlegen, was man sonst noch damit anstellen kann. Einen Namespace kann man "use"n, was Tipparbeit ersparen kann. "statische" Klassen kann man als Template-Parameter verwenden:

    struct Math1
    {
    	static double sin( double x );
    };
    struct Math2
    {
    	static double sin( double x );
    };
    
    template<typename Math>
    double calcSomeStuff( double x )
    {
    	return Math::sin( x );
    }
    int main()
    {
    	calcSomeStuff<Math1>( 10.0 );
    }
    

    Aber keine Ahnung, ob man das brauchen könnte.



  • foo loves bar schrieb:

    Hast recht, Ich denke dass ich dir hier zustimmen muss. Ich denke auch, dass der Overhead mit einer Klasse & static fkt größer ist als mit einem benannten Namensraum, oder?

    Der Overhead wird sich nicht signifikant unterscheiden. Aber es kommt drauf an, wozu man eine Klasse braucht. Ich persönlich frage mich bei nicht-abstrakten und Nicht-Metafunktions-Klassen, von denen man keine Instanzen erzeugen soll, wozu eine Klasse. Klar kann es sinnvoll sein, z.B. wenn Vererbung oder der von Badestrand verwendete Fall ermöglicht werden soll, aber im Allgemeinen halte ich einen Namensraum für naheliegender.

    Das ist aber auch zu einem gewissen Teil Geschmackssache, es gab hier auch schon Diskussionen darüber.

    OffTopic:

    drakon schrieb:

    Und ich finde auch, dass eine Funktion in einem Namensraum am klarsten aussägt, was es ist.

    Hehe, ich musste gerade an das denken:

    __________________________
    |                      __  \
     \/\/\/\              |  | |
            \/\/\/\       |__| |
                   \/\/\/\_____/
    

    😃



  • Nexus schrieb:

    OffTopic:

    drakon schrieb:

    Und ich finde auch, dass eine Funktion in einem Namensraum am klarsten aussägt, was es ist.

    Hehe, ich musste gerade an das denken:

    __________________________
    |                      __  \
     \/\/\/\              |  | |
            \/\/\/\       |__| |
                   \/\/\/\_____/
    

    😃

    Schön gezeichnet. :p



  • wo pack ich die namespacefunktionen rein, in eine cpp datei?
    muss ich die dann auch in der h datei in den namespace stopfen?



  • wie jetzt schrieb:

    wo pack ich die namespacefunktionen rein, in eine cpp datei?
    muss ich die dann auch in der h datei in den namespace stopfen?

    Du kannst namespaces in Headern, sowie in Quelldateien benutzen.

    bar.h
    namespace foo
    {
       void bar ();
    };
    

    bar.cpp

    namespace foo
    {
       void bar ()
       {
         std::cout << "hallo, welt";
       }
    }
    


  • wie jetzt schrieb:

    wo pack ich die namespacefunktionen rein, in eine cpp datei?
    muss ich die dann auch in der h datei in den namespace stopfen?

    Ja. / Ja.

    // Header
    
    namespace xyz
    {
    
    void function(int var);
    
    }
    
    // Implementierungsdatei
    
    namespace xyz
    {
    
    void function(int var)
    {
        // ...
    }
    
    }
    


  • ok! 👍


Anmelden zum Antworten