Généricité : template / typedef
Bonjour !
Cette discussion m'a semblé importante, je n'arrive cependant pas à comprendre les subtilités.
Citation:
Cela demande un peu de réflexion pour y arriver, mais, une fois que tu penses à utiliser typedef le principe est cependant simplissime
J'ai beau "réflexionner", ces typedef, ils servent à quoi ?! :calim2:
Le code n'est pas complet mais j'imagine la suite ainsi (dites moi si je me trompes)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| struct Point2DFlag{};
struct Point3DFlag{};
template <typename Type, typename Flag>
class Point;
template <typename Type>
class Point<Type, Point2DFlag>
{
public:
typedef Type value_type;//Ils permettent de récupérer sur quel type on travaille ?
typedef Point2DFlag flag_type;//Et sous quelle forme ?
typedef Point<value_type, flag_type> point_type;//Là je vois pas trop...
//Ensuite ce n'est que supposition :
Point<Type, Point2DFlag>( const value_type x, const value_type y ) : x( x ), y( y ) {}
const value_type GetX() const { return x; }
const value_type GetY() const { return y; }
private:
value_type x;
value_type y;
}; |
Pourquoi ne pas faire simplement :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| struct Point2DFlag{};
struct Point3DFlag{};
template <typename Type, typename Flag>
class Point;
template <typename Type>
class Point<Type, Point2DFlag>
{
public:
Point( const Type x, const Type y ) : x( x ), y( y ) {}
const Type GetX() const { return x; }
const Type GetY() const { return y; }
private:
Type x;
Type y;
}; |
Je ne vois pas vraiment la différence.. :?
La suite me pose aussi problème, j'y reviendrais sans doute après. :aie: