CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++] Petite question ^^

Shaolan777
Shaolan777
Niveau 10
07 juillet 2008 à 23:40:04

Salut ! :-)

Alors voilà, j'aurais besoin d'une âme charitable pour répondre à ma question.

En fait, imaginons 2 instances d'une classe avec 2 éléments x et y.

Ce que j'aimerais obtenir c'est le même genre de chose qu'en GLSL (swizzle), à savoir pouvoir faire :

class1.yx = class2.yx par exemple.

Mon problème, c'est comment différencier le cas où on insère la valeur dans xy, et celui où l'on désire juste récupérer les valeurs ? (class1 et class2 respectivement)

J'arrive facilement à définir par #define ce genre de chose mais uniquement pour récupérer les valeurs, en faisant

  1. define yx GetYX(),

où GetYX() se charge de récupérer dans un vecteur les valeurs de y et x.

Ce que j'aimerais pouvoir faire pour changer les valeurs, c'est donc utiliser le même yx afin de pouvoir faire class.yx = ...

Mais on ne peut pas avoir 2 #define du même nom...

J'aurais donc voulu savoir si quelqu'un connaîtrait l'astuce pour arriver à obtenir un tel résultat :ange:

Merci beaucoup à qui me répondra :-)))

dnob700
dnob700
Niveau 10
07 juillet 2008 à 23:57:58

Si les seules membres de ta classe sont x et y dans ce cas là surcharge l'opérateur = si tu veux faire quelques chose de particulier (ou n'y touch pas sinon) et écris juste :
class1 = class2; //les nom ne sont pas très appropriés pour deux instances d'une même classe.

Si il y a d'autre membre, ce n'est pas tout à fait possible sauf si x et y sont effectivement stocké dans un vecteur dans ta classe, dans ce cas là, il faut que GetXY() renvoie une référence vers ce vecteur et non pas une copie du vecteur et là tu peut ecrire :
class1.GetXY() = class2.GetXY(); // avec ta macro si tu veux.

Mais ça revient à rendre x et y publique dans ta classe car tu ne peut plus vérifier la valeur stocker dedans avant qu'elle soit enregistré. Donc c'est généralement l'indice d'une erreur de conception que d'avoir besoin d'écrire ça.

Shaolan777
Shaolan777
Niveau 10
08 juillet 2008 à 00:10:11

Une simmple surcharge ne suffit pas :

en effet, en surchargeant le =, comment différencier ces 2 cas :

1) class1.xy = class2.xy
2) class1.yx = class2.xy

Bien sûr ce n'est qu'un exemple. Du coup il est clair que dans ce cas mieux vaut faire un class1=class2 ou de faire un Get spécial pour le .yx, mais c'est pour le principe.
Imagine qu'il y ait 3 éléments dans la classe : x, y et z.

Tout l'intérêt résiderait dans le fait de pouvoir faire class1.xz = class2.yx par exemple, ce qui éviterait d'avoir à écrire :
class1.x = class2.y;
class1.z = class2.x;

C'est juste pour une question de gain de temps d'écriture de code au final. Son utilisation en GLSL est plus que pratique :ok:

dnob700
dnob700
Niveau 10
08 juillet 2008 à 17:11:06

Non, ça ce n'est pas possible en C++ (ou en tout cas je en vois pas de moyen de le faire). Mais dans tout les cas, je n'en vois pas trop l'usage.

Si tu veux vraiment fa

dnob700
dnob700
Niveau 10
08 juillet 2008 à 17:11:59

faire ce genre de chose, tu peut passer par une opération extérieur genre :
class1 = class2 * m;
où m est une matrice de rotation bien choisie pour échanger tes indices.

Shaolan777
Shaolan777
Niveau 10
08 juillet 2008 à 18:26:43

L'usage ? Comme je le disais, gain de temps en programmant et pratique à utiliser.
En GLSL c'est extrêmement pratique :-)

Enfin bon, merci quand même :ok:

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment