Klassenteile in versch. Dateien aufspalten



  • Danke - fie Erklärung an sich hatte ich jz auch scho ergoogelt ^^

    Das Feature des neuen Standards kannte ich noch gar nich - aber hab mich allgemein noch nich so sehr damit beschäfitgt - gibt auch so noch genug, was ich nich weiß 😉
    Aber danke noch mal : >

    bb



  • template <class GreenType, class ShadyBlueType>
    class FooBarBazQux
    {
    public:
    	class State {};
    	class LaliDo {};
    
    	// lieber so ...
    	static boost::shared_ptr<State> FiFaFunction(GreenType green, LaliDo lali);
    };
    
    // ... oder so?
    template <class GreenType, class ShadyBlueType>
    boost::shared_ptr<typename FooBarBazQux<GreenType, ShadyBlueType>::State> FooBarBazQux<GreenType, ShadyBlueType>::FiFaFunction(
            GreenType green,
            typename FooBarBazQux<GreenType, ShadyBlueType>::LaliDo lali)
    {
    }
    

    Ich finde da doch eher die erste Variante "besser" 😉



  • Dravere schrieb:

    Ach, es geht dir hier nur ums schreiben?

    Nein, es geht NIE ums schreiben, sondern immer ums lesen. Und wenn der Code vollgemüllt ist mit template<...> , Class<...> und typename Class<...>:: dann machts das Lesen deutlich schwerer.
    Ich denke dass die implizit-inline Version dann doch besser lesbar ist - und da man in den meisten IDEs inzwischen soetwas wie ein "collapse all" hat, ists auch nicht schwer, die ganzen Definitionen auf die Funktionssignaturen zu reduzieren.


  • Administrator

    @pumuckl,
    Dann könntest du aber das gleiche über die Trennung sagen, wenn es sich nicht um Templates handelt. Man hat auch überall ein Class:: davor auch vor Rückgabetypen, welche aus der Klasse stammen. Das ganze wiederholt sich auch die gane Zeit und wenn man alles inline machen würde, könnte man mit der IDE durch "collapse all" auch ohne Probleme die reine Deklaration sehen. 😉

    Wenn du allgemein der Meinung bist, dass die Trennung unübersichtlich ist, dann versteh ich es zwar nicht, bzw. bin anderer Meinung, kann es aber unter Geschmacksache versorgen.
    Wenn du nur Trennung bei Templates als Problem siehst, dann wird in meinem Gehirn eine std::logic_error Exception geworfen 🙂

    @hustbaer,
    Du hast unteranderem den gleichen Fehler gemacht, wie unskilled ihn bereits getan hat 😉
    Zudem kann man das durchaus auch noch ein wenig besser strukturieren.

    template <class GreenType, class ShadyBlueType>
    boost::shared_ptr
    <
      typename FooBarBazQux
      <
        GreenType,
        ShadyBlueType
      >::State
    >
    FooBarBazQux<GreenType, ShadyBlueType>::FiFaFunction(GreenType green, LaliDo lali)
    {
    }
    

    Und mit dem neuen Standard wäre es wohl so, oder? (kenne mich mit der Syntax noch nicht so genau aus:

    template <class GreenType, class ShadyBlueType>
    auto FooBarBazQux<GreenType, ShadyBlueType>::FiFaFunction(GreenType green, LaliDo lali)
      -> boost::shared_ptr<State>
    {
    }
    

    Und ja, ich ziehe sowas vor. Vor allem sind solche komplexe Ausdrücke, wie du einen hier präsentierst, eher selten anzutreffen. Und wenn sie vermehrt anzutreffen sind, dann kann man sie meistens durch ein simples typedef irgendwo oder einer kleinen Hilfstruktur wesentlich vereinfachen.

    Grüssli


Anmelden zum Antworten