Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Ajout d'un constructeur pour Vector2  (Lu 4462 fois)

0 Membres et 1 Invité sur ce sujet

nicooomg

  • Jr. Member
  • **
  • Messages: 66
    • Voir le profil
Ajout d'un constructeur pour Vector2
« le: Novembre 12, 2013, 04:21:57 am »
Bonjour,

J'aimerais voir à l'avenir quelques ajouts dans les constructeurs de la classe Vector2;
Je ne sais pas pour vous, mais je tombe souvent sur des minis hacks à mettre en place autour de la construction car les choix sont quand meme assez legers !

    Vector2();
    Vector2(T X, T Y);
    template <typename U>
    explicit Vector2(const Vector2<U>& vector);
 

Est-ce que un jour on pourrait avoir quelque chose de ce style ?
    template<typename... Types>
    Vector2(const std::tuple<Types...>& types) : x(std::get<0>(types)), y(std::get<1>(types)) {}

Les mini-hacks ne sont pas très lourds, mais ils permettront au moins une plus grande lisibilité !

Merci,

nico
« Modifié: Novembre 12, 2013, 04:23:51 am par nicooomg »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Ajout d'un constructeur pour Vector2
« Réponse #1 le: Novembre 12, 2013, 07:43:52 am »
SFML n'utilise pas encore de C++11, donc la réponse est très clairement non.

Ensuite je ne vois ni l'intérêt d'un std::tuple, ni du nombre variable d'arguments sachant que de toute façon on sait très bien qu'il en faut exactement deux.

Du coup ce serait bien de développer un peu ton idée, de nous dire dans quel cas concret ce serait utile, etc.
Laurent Gomila - SFML developer

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Ajout d'un constructeur pour Vector2
« Réponse #2 le: Novembre 12, 2013, 02:35:17 pm »
Se serait en effet très pratique en faisant une seule classe plutôt que 2 classes pour gérer les vecteurs 3D et 2D (je pense que c'est ce qu'il a voulu dire), c'est ce que je prévois plus tard de faire dans l'amélioration du code source de mon framework qui permettra aussi de faire de la 3D mais ici je n'en vois pas trop l'intérêt vu que l'on reste en 2D seulement avec SFML. (Bref c'est ce que Laurent veut)

(A mon avis c'est ce qu'il a voulu dire)

Sinon il y a d'autre classe ou j'aurai aimé avoir plus de constructeurs comme par exemple la classe Sprite mais  rien ne t'empêche de recoder des classes de SFML moi, c'est ce que je fais lorsque Laurent n'a pas l'intension d'implémenter mes idées dans le projet ou bien que je veux faire autrement que lui.

Et j'en suis super ravi. (Surtout quand ça marche.  :) )
Bref vive l'opensource on est vraiment soumis à moins de contraintes.
« Modifié: Novembre 12, 2013, 02:41:54 pm par Lolilolight »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Ajout d'un constructeur pour Vector2
« Réponse #3 le: Novembre 12, 2013, 02:54:30 pm »
Citer
A mon avis c'est ce qu'il a voulu dire
J'en doute. Il parle vraiment d'ajouter un constructeur à la classe Vector2, avec comme source un std::tuple duquel on extrait les deux premières composantes. Il donne même la définition du constructeur qu'il veut ajouter, ça limite les interprétations possibles... :P

Citer
Se serait en effet très pratique en faisant une seule classe plutôt que 2 classes pour gérer les vecteurs 3D et 2D
Je vois mal comment une telle classe pourrait être utilisable.

Citer
Sinon il y a d'autre classe ou j'aurai aimé avoir plus de constructeurs comme par exemple la classe Sprite mais  rien ne t'empêche de recoder des classes de SFML
Pas besoin de recoder une classe pour ajouter un constructeur. Une fonction libre suffit.

sf::Sprite makeSprite(...)
{
    sf::Sprite sprite;
    ...

    return sprite;
}

template<typename T, typename... Types>
sf::Vector2<T> makeVector(const std::tuple<Types...>& types)
{
    return sf::Vector2<T>(std::get<0>(types), std::get<1>(types));
}
Laurent Gomila - SFML developer

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Ajout d'un constructeur pour Vector2
« Réponse #4 le: Novembre 12, 2013, 07:14:17 pm »
Ouais mais non je voulais en fait utiliser 2 origines de transformations différentes pour la position et la rotation des sprites donc faire une fonction qui fait office de constructeur ça n'aurait pas suffit et puis je trouve pas ça, très cool, pour moi un constructeur c'est une fonction qui a le même nom que sa classe, bref...

Sinon, un std::vector avec un nombre indéfini de composante aurait été bien je pense que je vais faire ça surtout dès qu'il faut commencer à faire des classes matrix3, matrix2, matrix4, etc.... (Un tuple ce n'est que 2 composantes donc..., je crois pas que ça irait)
« Modifié: Novembre 12, 2013, 07:19:35 pm par Lolilolight »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Ajout d'un constructeur pour Vector2
« Réponse #5 le: Novembre 12, 2013, 07:45:56 pm »
Un std::vector c'est un tableau alloué sur le free-store et qui peut grossir dynamiquement. On est bien loin de ce qu'il faut pour représenter un vecteur à 2 ou 3 composantes.

Un std::tuple c'est déjà mieux : c'est un ensemble hétérogène statique à N composantes (et pas uniquement 2). Mais c'est encore assez inadapté : pas besoin de l'hétérogénité, et le nom ainsi que l'accès aux composantes est assez verbeux et abstrait.

Je vois vraiment pas le problème à utiliser des classes qui ont exactement le bon nom et les bons membres. Avant de chercher une alternative peut-être faudrait-il commencer par identifier clairement les problèmes que tu veux résoudre ?
Laurent Gomila - SFML developer

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Ajout d'un constructeur pour Vector2
« Réponse #6 le: Novembre 12, 2013, 08:18:52 pm »
T'inquiète je suis sûr que je peux le faire, j'ai déjà réussi à faire l'impossible (ou presque), créer un rpg à moi tout seul. (Même si je n'ai pas encore tout à fait fini)

Par contre si tu me demande de faire de la magie alors là ça risque vraiment d'être impossible.  :D
« Modifié: Novembre 12, 2013, 08:20:24 pm par Lolilolight »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Ajout d'un constructeur pour Vector2
« Réponse #7 le: Novembre 12, 2013, 08:57:32 pm »
Tu es sûr que tu peux faire quoi ? Je te disais juste que c'était pas une bonne idée, pas que c'était impossible.

Ensuite on va s'arrêter là pour le moment, et essayer de revenir au sujet initial.
Laurent Gomila - SFML developer

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Ajout d'un constructeur pour Vector2
« Réponse #8 le: Novembre 13, 2013, 04:56:06 pm »
Ok, si tu le dis, alors je ne ferai pas cela.

De toute façon je suis déjà content d'avoir compris par moi même ce système de vecteur et de matrices pour les projections et les transformations à l'aide d'articles en Anglais que j'ai trouvé sur internet car à l'école je n'ai juste vu que les bases en géométrie.

Mais revenons au sujet...
« Modifié: Novembre 13, 2013, 04:58:56 pm par Lolilolight »