Frage zu Template am beispiel std::pair



  • Hallo,

    hab mal den template code (header) aus der hife kopiert:

    template<class Type1, class Type2>
       struct pair 
       {
       typedef Type1 first_type;
       typedef Type2 second_type
       Type1 first;
       Type2 second;
       pair( );
       pair(
          const Type1& __Val1, 
          const Type2& __Val2
       );
       template<class Other1, class Other2>
          pair(
             const pair<Other1, Other2>& _Right
          );
       };
    

    ich versteh den code, allerding frag ich mich für wa die typedef notwendig sind?



  • der ist nur dazu da, damit man im nachfolgenden first_type anstellen von Type1 benutzen kann, was da aber nicht gemacht wird.
    normalerweise, also wenn man es auch benutzt, ist so etwas auch nicht notwendig. eigentlich sogar störend, aber c++ lässt es zu.



  • LehrlingC++ schrieb:

    ich versteh den code, allerding frag ich mich für wa die typedef notwendig sind?

    Der Standard definiert, wie die Schnittstelle dieser Klasse auszusehen hat, und zur Schnittstelle gehört eben dazu, dass diese Typaliase vorhanden sind. Dadurch kann man an anderer Stelle problemlos auf die Typen zugreifen, wenn man mit Templates arbeitet:

    template <typename TPair>
    void f(TPair const& p) {
        // Schlüssel extrahieren:
        typename TPair::first_type key = p.first;
        // … mach was mit dem Schlüssel.
    }
    
    pair<int, int> x = make_pair(1, 2);
    pair<double, char> y = make_pair(1.2, 'x');
    
    f(x);
    f(y);
    


  • f u c k (edit: zweiter versuch: da man hier sonst love aufgedrückt bekommt.) ja, ich stehe neben mir. natürlich hat konrad recht. ich habe die überschrift ignoriert und nur deine klasse gelesen...



  • void f(TPair const& p) { 
        // Schlüssel extrahieren: 
        typename TPair::first_type key = p.first; 
        // … mach was mit dem Schlüssel. 
    }
    

    d.h.

    typename TPair::first key= p.first;
    

    würde nich gehen?

    woher wisst ihr das? ich will auch ein Buch 🤡



  • steh in dem buch von bjarne und auch im standard.

    den draft des standards findest du auf der iso-seite. das buch von bjarne musst du käuflich erwerben. das ist allerdings beides nichts für anfänger.


Anmelden zum Antworten