Fejtörő – „csak guruknak”…

Kezdőlap Fórumok Programozás Fejtörő – „csak guruknak”…

10 bejegyzés megtekintése - 111-120 / 121
  • Szerző
    Bejegyzés
  • #2104415
    gabaman
    Felhasználó

      Nem jó, próbáld csak ki:

      Code:
      template
      class Class {
        public:
        void print_type ();
      };

      template
      void Class::print_type () {
          std::cout << typeid(R).name() << std::endl;
          std::string str;
          str = typeid(R).name();
      }

      int main(int argc, char **argv)
      {
          Class<Class<std::vector > > var;

          var.print_type();

          return 0;
      }

      Az eredmény:

      5ClassISt6vectorIiSaIiEEE

      ami nem nagyon hasonlít az elvártra (Class >). Nem is csoda, dekódolni kellene.

      namespace std
      {
        /**
        *  @brief  Part of RTTI.
        *
        *  The @c type_info class describes type information generated by
        *  an implementation.
        */
        class type_info
        {

      (…)

          /** Returns an @e implementation-defined byte string; this is not
      *  portable between compilers!  */
          const char* name() const

      Akkor hogy is van a helyes megoldás? 39.gif 

      #2104416
      gabaman
      Felhasználó

        Nem jó, próbáld csak ki:

        Code:
        template
        class Class {
          public:
          void print_type ();
        };

        template
        void Class::print_type () {
            std::cout << typeid(R).name() << std::endl;
            std::string str;
            str = typeid(R).name();
        }

        int main(int argc, char **argv)
        {
            Class<Class<std::vector > > var;

            var.print_type();

            return 0;
        }

        Az eredmény:

        5ClassISt6vectorIiSaIiEEE

        ami nem nagyon hasonlít az elvártra (Class >). Nem is csoda, dekódolni kellene.

        namespace std
        {
          /**
          *  @brief  Part of RTTI.
          *
          *  The @c type_info class describes type information generated by
          *  an implementation.
          */
          class type_info
          {

        (…)

            /** Returns an @e implementation-defined byte string; this is not
        *  portable between compilers!  */
            const char* name() const

        Akkor hogy is van a helyes megoldás? 39.gif 

        #2104417
        pointux
        Felhasználó

          Azt ismerem intre azt írja, hogy i, unsigned intre, szem azt, hogy j, a sajátokra, meg ehhez hasonlókat. (Gyanítom, hogy ezek kerülnének az asm file-ba.)

          #2104418
          pointux
          Felhasználó

            Azt ismerem intre azt írja, hogy i, unsigned intre, szem azt, hogy j, a sajátokra, meg ehhez hasonlókat. (Gyanítom, hogy ezek kerülnének az asm file-ba.)

            #2104419
            pointux
            Felhasználó

              Na, akkor fejtörő!

              Mag szerettem volna valósítani egy olyan osztályt melynek pl.: egy std::list-et adok át paraméterül, de képes fogadni, bármilyen class típusú osztályt.
              Viszont template > nyílván nem valósítható meg. Az std::list-et csak paraméterként adhatom meg, mert akkor egyes operátorok nem lennének egyértelműek… hibát okozhat.
              A template szintén nem nyerő, mert akkor a felhasználóra lenne bízva, hogy a typeT illetve a classT-ben foglalt típus azonos legyen.
              (Ja, és a ClassT ismerete nem elég! Kell a typeT-t is ismernem.)

              Az igazi az lenne, ha így lehetne használni:
              Class > class ( std::list )

              Persze ez megvalósítható egy szimpla template -vel, csak akkor az int típust honnan tudom meg.
              (Nyílván a műveleteket jelen esetben az std::list int típusú tartalmán akarom végezni. De ehhez tudni kéne, hogy ő int és nem pl. float.)

              Ki mit gondol, hogyan lehetne megoldani?

              #2104420
              pointux
              Felhasználó

                Na, akkor fejtörő!

                Mag szerettem volna valósítani egy olyan osztályt melynek pl.: egy std::list-et adok át paraméterül, de képes fogadni, bármilyen class típusú osztályt.
                Viszont template > nyílván nem valósítható meg. Az std::list-et csak paraméterként adhatom meg, mert akkor egyes operátorok nem lennének egyértelműek… hibát okozhat.
                A template szintén nem nyerő, mert akkor a felhasználóra lenne bízva, hogy a typeT illetve a classT-ben foglalt típus azonos legyen.
                (Ja, és a ClassT ismerete nem elég! Kell a typeT-t is ismernem.)

                Az igazi az lenne, ha így lehetne használni:
                Class > class ( std::list )

                Persze ez megvalósítható egy szimpla template -vel, csak akkor az int típust honnan tudom meg.
                (Nyílván a műveleteket jelen esetben az std::list int típusú tartalmán akarom végezni. De ehhez tudni kéne, hogy ő int és nem pl. float.)

                Ki mit gondol, hogyan lehetne megoldani?

                #2104421
                uzsolt
                Felhasználó

                  Na, ilyenkor sajnálom nagyon, hogy c-ben, c++-ban csak egy pöttyet (=felismerem+helloworld), a template-ekben pedig egyáltalán nem vagyok jártas 🙁
                  De ígérem, itt a nyári szünet, pótvizsgáig szinte(!) semmi dolgom, ezeket is pótlom…

                  #2104422
                  uzsolt
                  Felhasználó

                    Na, ilyenkor sajnálom nagyon, hogy c-ben, c++-ban csak egy pöttyet (=felismerem+helloworld), a template-ekben pedig egyáltalán nem vagyok jártas 🙁
                    De ígérem, itt a nyári szünet, pótvizsgáig szinte(!) semmi dolgom, ezeket is pótlom…

                    #2104423
                    pointux
                    Felhasználó

                      Na, megvan a megoldás. 🙂

                      template class classT >
                      class Class  {
                      }
                      [/CODE]

                      [CODE=main.cpp]
                      Class classList;
                      [/CODE][CODE=Class.h]
                      template class classT >
                      class Class  {
                      }
                      [/CODE]

                      Class classList;
                      [/CODE][CODE=main.cpp]
                      Class classList;
                      [/CODE]

                      #2104424
                      pointux
                      Felhasználó

                        Na, megvan a megoldás. 🙂

                        template class classT >
                        class Class  {
                        }
                        [/CODE]

                        [CODE=main.cpp]
                        Class classList;
                        [/CODE][CODE=Class.h]
                        template class classT >
                        class Class  {
                        }
                        [/CODE]

                        Class classList;
                        [/CODE][CODE=main.cpp]
                        Class classList;
                        [/CODE]

                      10 bejegyzés megtekintése - 111-120 / 121
                      • Be kell jelentkezni a hozzászóláshoz.