Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2009 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [c++]Détecter la modification de la valeur d'une variable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c++]Détecter la modification de la valeur d'une variable

n°1433606
pegasus32
Posté le 30-08-2006 à 11:25:11  profilanswer
 

Bonjour,
 
J'aurai besoin de pouvoir détecter si la valeur d'une variable a été modifiée.
 
Je pensais pour cela encapsuler ma variable dans une classe template (pour avoir une seul classe pour les différents types de base) surchargant les différents opérateurs d'affectation (pour pouvoir utiliser l'objet de la même manière qu'un type de base), et qui modifierait un flag en cas de modification de la valeur de la variable.
 
Est-ce que ca vous parrait être une solution valable ou y a-t-il plus simple?


Message édité par pegasus32 le 30-08-2006 à 11:26:20
mood
Publicité
Posté le 30-08-2006 à 11:25:11  profilanswer
 

n°1433615
Amonchakai
Posté le 30-08-2006 à 11:34:38  profilanswer
 

Salut !
 
Moi ce qui me paraitrait plus simple c'est a la place de la surchage de tes opérateurs c'est de faire tout bêtement une copie de ta variable et la comparer ensuite a chaque fois avec ta variable initiale.

n°1433683
pegasus32
Posté le 30-08-2006 à 13:33:32  profilanswer
 

C'est plus simple c'est sur, mais j'aimerais bien avoir un système plus transparent ;) Je vais expliquer en gros le contexte:
 
Dans un objet donné (dérivant tous d'une classe de base), pouvoir définir des variables dont tout changement de valeur pourra être détecté par cet objet.
Et ce sans obliger le programmeur qui crée la classe à gérer lui même ces tests.
 
Le but final étant de récupérer les variables modifiées afin de pouvoir répercuter ces modifs sur une copie de cet objet situé sur un autre ordinateur.


Message édité par pegasus32 le 30-08-2006 à 13:35:35
n°1433688
_darkalt3_
Proctopathe
Posté le 30-08-2006 à 13:37:14  profilanswer
 

Un pattern observer/observable ?


---------------
Töp of the plöp
n°1433714
pegasus32
Posté le 30-08-2006 à 14:09:29  profilanswer
 

_darkalt3_ a écrit :

Un pattern observer/observable ?


Tu veux faire dans le sens où les variables sont les observables, et ma classe est l'observer?
 
Ca reviendrait donc plus ou moins à ma 1ere solution, sans qu'au lieu de se mettre un flag, la variable signale son changement à sa classe via une methode de la classe de base.....effectivement c'est pas une mauvaise idée :)
 
Sinon ce que je dis n'est peut être pas très clair :D
Donc en gros j'essaie d'implémenter un système de ce type là :
http://developer.valvesoftware.com [...] _Variables

Message cité 1 fois
Message édité par pegasus32 le 30-08-2006 à 14:13:35
n°1433718
_darkalt3_
Proctopathe
Posté le 30-08-2006 à 14:17:25  profilanswer
 

pegasus32 a écrit :

Tu veux faire dans le sens où les variables sont les observables, et ma classe est l'observer?


 
ca voudrait dire que ta classe contenant la variable s'enregristre auprès d'un observer qui réagit en fonction de l'observation.
 
C'est un pattern particulier et bien défini, qui est largement documenté dans le Grand Ternet.


---------------
Töp of the plöp
n°1433781
lkolrn
<comment ça marche?>
Posté le 30-08-2006 à 15:49:57  profilanswer
 

et il fonctionne comment l'observer dans ce cas ? Il faut bien le prévenir au moment d'affecter une nouvelle valeur à la variable observée...
 
Et il est dit que c'est l'objet lui-même qui doit être capable de détecter tout changement => surcharge du =

n°1434159
pegasus32
Posté le 31-08-2006 à 11:08:41  profilanswer
 

J'ai un petit souci au niveau de la surcharge des opérateurs binaires...
Je les définis en dehors de la classe de la manière suivante :
 
template <typename U,typename V>
claNetVar<int> operator+(const claNetVar<U> &c1, const claNetVar<V> &c2)
{
    claNetVar<char> result = c1.getValue()+c2.getValue();
    return result;
}
 
Mais j'aimerais bien renvoyer le type réel résultant de l'opération, donc :
 
float+int=float
int+int=int
 
Je présume que le seul moyen est de surcharger l'opérateur + pour chaque type qu'on lui envoie? donc :
 
claNetVar<int> operator+(const claNetVar<int> &c1, const claNetVar<int> &c2)
claNetVar<float> operator+(const claNetVar<float> &c1, const claNetVar<int> &c2)
claNetVar<float> operator+(const claNetVar<int> &c1, const claNetVar<float> &c2)
...
 
Assez lourd quoi :D


Message édité par pegasus32 le 01-09-2006 à 08:07:01
n°1434560
Joel F
Real men use unique_ptr
Posté le 31-08-2006 à 19:29:12  profilanswer
 

non, utilise des traits :
 

Code :
  1. template<class T1,class T2> struct return_type {};
  2.  
  3. template<> struct return_type<float,int>
  4. {
  5.    typedef float type_t;
  6. };
  7. template<> struct return_type<int,float>
  8. {
  9.    typedef float type_t;
  10. };
  11. template<class T> struct return_type<T,T>
  12. {
  13.    typedef T type_t;
  14. };
  15. template <typename U,typename V>
  16. claNetVar<typename return_type<U,V>::type_t>
  17. operator+(const claNetVar<U> &c1, const claNetVar<V> &c2)
  18. {
  19.     claNetVar<typename return_type<U,V>::type_t>  result;
  20.     res = c1.getValue()+c2.getValue();
  21.     return result;
  22. }


 
A affiner avec des detrompeur template et regarde du coté de boost::traits ou de LOKI.


Message édité par Joel F le 31-08-2006 à 19:29:29

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [c++]Détecter la modification de la valeur d'une variable

 

Sujets relatifs
une variable dans l'inspecteur de composantsSoucis : Plusieurs CHECKBOX ..COMMENT FAIRE? pour renvoyer valeur diff
Pb pour récupérer une valeur suite a un POSTcalculer une valeur entre deux dates
[PHP] Aide pour une modification du index.php de mon Site[RESOLU] Afficher popup, variable php
[C] comment détecter les caractères BOM dans buffer char* ?Besoin d'aide pour modification courte d'un fichier php
Valeur max d'un int(11)[RESOLU]Condition de variable
Plus de sujets relatifs à : [c++]Détecter la modification de la valeur d'une variable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR