Forum de la communauté SFML
Général => Discussions générales => Discussion démarrée par: Lolilolight le Janvier 23, 2013, 09:15:57 am
-
Heu tu t'es un peu cassé la tête la en refaisant à chaque fois une classe pour les vecteurs de float, de int, d'unsigned int, etc...
Il y a moyen de faire plus simple si tu sais utilisé les "template." ;)
Ca se voit que tu t'inspires beaucoup de opengl qui a été codé en C mais si tu fais ta librairie compatible en c++ uniquement, autant utiliser toutes les nouveautés de l'évolution du langage C. ;)
-
hum.... t'as au moins regardé les sources ? https://github.com/SFML/SFML/blob/master/include/SFML/System/Vector2.hpp
-
Laurent a juste défini trois types de Vector2 (et Vector3) qui sont les plus utilisés pour pouvoir plus rapidement les discerner et les utiliser.
Comme le dit Hiura, regarde les sources =)
-
Heu tu t'es un peu cassé la tête la en refaisant à chaque fois une classe pour les vecteurs de float, de int, d'unsigned int, etc...
Il y a moyen de faire plus simple si tu sais utilisé les "template." ;)
Ca se voit que tu t'inspires beaucoup de opengl qui a été codé en C mais si tu fais ta librairie compatible en c++ uniquement, autant utiliser toutes les nouveautés de l'évolution du langage C. ;)
Lolilol, je crois que tu as parlé trop vite :D
Je pense que Laurent sait ce qu'il fait, il suffit d'un regard sur les sources pour voir que c'est très bien foutu...
-
Ha ok, là je comprends mieux. ^^
-
C'est vachement constructif de faire ce genre de remarque sans même prendre la peine de regarder... :-\
-
Erf non mais j'ai fais cette remarque juste parce que on pouvait construire un Vector2i en lui passant des float en paramètre, mais bon normalement on ne peut pas si on utilise la redéfinition de template quand on défini plusieurs type de vecteurs, alors ça m'a induit en erreur, enfin soit..., ce n'est pas grâve. ^^
-
Oui, on peut toujours faire ça temps qu'il existe une conversion implicit de U à T, avec U = float, T = int.
-
Ha ok moi je ne procède pas comme ça, je fais une redéfinition de template pour chaque définition de vecteur par exemple avec Vector2f je ne peux lui passer que des type float en argument mais bon ce n'est pas grâve.
Avec la conversion implicite on peut en effet aussi faire comme ça. ^^
-
Ce que je voulais dire, c'est que ce n'est pas toi qui gère les conversions implicites mais le compilateur.
Par exemple, si tu as une fonction void f(float x), tu peux lui passer 3, 3.0 ou encore 3.f et ça va marcher. Le fait que ce soit un template n'y change rien étant donné que quand le type du template est spécifié, ça revient à une fonction normale.
-
Oui je sais ça mais il me semble qu'il y ai moyen de faire des classes ou fonction template qui n'accepte qu'une seule type de donnée.
-
il faut jouer avec le mot clef 'explicit' à ce moment là.
-
Pas de manière triviale. Il faut sortir des cochonneries de meta-programmation.
Ca peut aussi arriver lorsque tu as plusieurs surcharges d'une fonction, dont certaines templates, et que laisses le compilo déduire les paramètres templates (typiquement : un opérateur). Par exemple, il me semble que tu ne peux pas faire "sf::Vector2f / int". Mais là ce n'est pas intentionnel.
il faut jouer avec le mot clef 'explicit' à ce moment là.
Ce mot-clé ne sert qu'à éviter qu'un constructeur à 1 paramètre ne soit appelé implicitement (et en C++11, ça marche aussi pour les opérateurs de conversion). C'est pas vraiment la même chose.
-
Ce mot-clé ne sert qu'à éviter qu'un constructeur à 1 paramètre ne soit appelé implicitement (et en C++11, ça marche aussi pour les opérateurs de conversion). C'est pas vraiment la même chose.
Juste ! J'avais oublié que ce n'était que pour les constructeurs..