Partage
  • Partager sur Facebook
  • Partager sur Twitter

Template

A quoi ça sert.

    14 octobre 2007 à 11:06:12

    Moi, j'ai une autre question :

    Est-ce que
    1. template < int T >


    veut dire quelque chose?
    • Partager sur Facebook
    • Partager sur Twitter
      14 octobre 2007 à 11:26:09

      s32 est préférable a int dans ce projet car il permet de simplifier la compréhension, ne pas utiliser de long, … Bien sure, c'est inutile de définir des variables comme ceci pour un petit projet, mais pour une bibliothèque, ça a tout son intérêt.

      En fait je pense que le code ressemblerait plus vite à ça :
      1. template<typename T>
      2. struct dimension2d
      3. {
      4. T Height;
      5. T Width;
      6. dimension2d() : Width(0), Height(0);
      7. dimension2d(T Width, T Height) : Width(Width), Height(Height);
      8. };

      Désolé pour l'indentation. Qu'on me corrige si je me trompe :)
      • Partager sur Facebook
      • Partager sur Twitter
        14 octobre 2007 à 11:35:54

        ok, donc T serait enfait s32 ?
        • Partager sur Facebook
        • Partager sur Twitter
          14 octobre 2007 à 12:59:36

          Dans ce cas si oui.
          T est ce que tu lui dis d'être. En notant s32 entre les <> tu lui dis d'être s32, tu pourrais très bien mettre dimesion2d<int>(20,20) ou même dimesion2d<double>(20.51,20.51) par exemple.
          • Partager sur Facebook
          • Partager sur Twitter
            14 octobre 2007 à 13:46:16

            Je précise juste que dans Irrlicht on utilise les typedef irr::s32 irr::f32, et encore plein d'autre, il y a une liste dans la doc, ici
            • Partager sur Facebook
            • Partager sur Twitter
              14 octobre 2007 à 13:54:33

              Citation : k4dw4

              Dans ce cas si oui.
              T est ce que tu lui dis d'être. En notant s32 entre les <> tu lui dis d'être s32, tu pourrais très bien mettre dimesion2d<int>(20,20) ou même dimesion2d<double>(20.51,20.51) par exemple.



              ok merci c'est deja plus clair pour moi

              merci
              • Partager sur Facebook
              • Partager sur Twitter
                14 octobre 2007 à 14:45:11

                Citation : gogeta1

                Moi, j'ai une autre question :

                Est-ce que

                1. template < int T >



                veut dire quelque chose?


                non.
                1. // çà
                2. template < class T >
                3. // ou
                4. template < typename T >
                • Partager sur Facebook
                • Partager sur Twitter
                  14 octobre 2007 à 14:55:44

                  s32 = signed int codé sur 4 octets (je crois)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 octobre 2007 à 15:34:03

                    Citation : ミニロプ

                    1. // çà
                    2. template < class T >
                    3. // ou
                    4. template < typename T >

                    Ou ça :
                    template <int T>

                    1. template<int T>
                    2. class nombre_Int
                    3. {
                    4. public:
                    5.     enum {Valeur = T;}
                    6. };
                    7. int x = nombre_Int<5>::Valeur;
                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 octobre 2007 à 15:55:47

                      Et dailleurs les template< int T > c'est très utile dans la méta-programmation.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        14 octobre 2007 à 16:40:02

                        k4dw4 > je ne savais pas c'est la première fois que je le vois.

                        çà sert à quoi concrètement ? (car ton exemple c'est un peu "pourquoi faire simple quand on peut faire compliqué)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          14 octobre 2007 à 16:55:00

                          =)
                          Très bonne question.
                          Comme bogoss la dit, ça sert a faire de la méta-programmation.
                          En gros, ça permet de faire des calcules mathématiques pendant la phase de compilation. L'avantage est que les calculs ne sont pas effectués pendant l'exécution, ce qui signifie que ça permet de gagner énormément de vitesse. Le gros désavantage, c'est que ça ne fonctionne qu'avec les données constantes (donc tu ne peux rien mettre qui vienne de l'utilisateur ou de son matériel).

                          1. #include <iostream>
                          2. template <int N> inline double Puissance(double x)
                          3. {
                          4.     return x * Puissance<N - 1>(x);
                          5. }
                          6. template <> inline double Puissance<0>(double x)
                          7. {
                          8.     return 1.0;
                          9. }
                          10. int main (int argc, char * const argv[]) {
                          11.     double x = Puissance<32>(2);
                          12.     std::cout << x;
                          13.     return 0;
                          14. }
                          Exemple tout droit piqué d'un tutoriel pas mal la dessus : http://loulou.developpez.com/tutoriels/cpp/metaprog/
                          • Partager sur Facebook
                          • Partager sur Twitter
                            14 octobre 2007 à 21:22:26

                            A l'auteur : je t'invite vraiment à lire le tuto de Laurent (l'url juste au-dessus), ainsi que le deuxième que j'ai donné en lien plus tôt dans le topic. Le premier pose juste les bases des templates.
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Template

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown