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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Pointeur sur constructeur ou Pointeur sur Classe ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Pointeur sur constructeur ou Pointeur sur Classe ?

n°910271
lelfe
Posté le 29-11-2004 à 14:04:54  profilanswer
 

Bonjour
 
J'aimerai pouvoir créer des callbacks qui me permettrait d'instancier des objets. J'ai actuellement mis en place une parade en utilisant une méthode statique qui ne fait que faire le même boulot qu'un constructeur, qui peut être facilement pointée
 
Message *(*)(Contact *)
 
Mais ca m'oblige à rajouter pas mal de code, dupliqué assez souvent pour peu de choses. Je cherche un moyen de contourner le problème, sans template. Une solution consisterait à utiliser des pointeurs de constructeur ou des pointeurs de classes qui m'autoriseraient à faire des 'new' dessus. Mais je ne sais même pas si ca existe.
 
Vous avez une idée ?
 
Lelfe

mood
Publicité
Posté le 29-11-2004 à 14:04:54  profilanswer
 

n°910382
Taz
bisounours-codeur
Posté le 29-11-2004 à 16:14:28  profilanswer
 

fais une fonction static factory dans ta classe
 
class Foo
{
public:
static Foo *factory() { return new Foo; }
};
 
Foo (*f)() =  &Foo::factory

n°910533
lelfe
Posté le 29-11-2004 à 18:16:42  profilanswer
 

Taz a écrit :

fais une fonction static factory dans ta classe
 
class Foo
{
public:
static Foo *factory() { return new Foo; }
};
 
Foo (*f)() =  &Foo::factory


 
En fait, c'est exactement ce que j'ai actuellement.
Mais ca m'oblige à rajouter une fonction statique factory() dans toutes les classes qui ont besoin d'être enregistrée. Et justement, c'est ce problème que je voudrai éviter.
 
En gros, j'ai ca :
 

Code :
  1. Class1::Class1() {
  2.   return ;
  3. }
  4. Class1 * Class1::factory() {
  5.   return new Class1();
  6. }
  7. void Class1::register() {
  8.   Registry::add( Class1::CODE, Class1.factory() );
  9. }
  10. ...
  11. //Et ceci, pour N classes : Class1 à ClassN


 
Or, ces classes héritent toutes de la même classe MetaClasse.
Donc, ca m'embête d'avoir à réimplémenter ces 3 méthodes, dans les N classes, alors que seul le constructeur est vraiment utile.
J'aimerai bien factoriser ce code au niveau de la classe MetaClasse, mais sans template, car j'ai besoin d'avoir des pointeurs MetaClasse *, sans avoir à spécifier un template à chaque fois.
 
Donc, j'avais pensé à un pointeur de constructeur, ce qui m'aurai supprimé le besoin de la factory, ou un pointeur de classe, ce qui aurait eu le même effet.
 
Lelfe


Message édité par lelfe le 29-11-2004 à 18:17:26
n°910546
Taz
bisounours-codeur
Posté le 29-11-2004 à 18:27:35  profilanswer
 

ben tu peux pas. Tu te fous des limitations à la con 'pas de template' alors paie le prix : code tout.
 
 
Sinon t'as le droit faire comme tout le monde un méthode clone/create en virtuelle pure dans ta classe de base

n°910554
lelfe
Posté le 29-11-2004 à 18:44:36  profilanswer
 

Taz a écrit :

ben tu peux pas. Tu te fous des limitations à la con 'pas de template' alors paie le prix : code tout.


 
C'est pas des limitations à la con. J'avais pensé à mettre des templates, mais dans ce cas là, ma classe de base dépend d'un template, et je ne peux plus avoir de pointeur générique dessus. Ou alors, faut éclater le code de la classe mère en 2.
 

Taz a écrit :


Sinon t'as le droit faire comme tout le monde un méthode clone/create en virtuelle pure dans ta classe de base


 
C'est déjà le cas, mais ca oblige toujours à recoder ces fonctions dans les classes filles.
 
Lelfe

n°910555
Joel F
Real men use unique_ptr
Posté le 29-11-2004 à 18:45:42  profilanswer
 

lelfe a écrit :

C'est pas des limitations à la con. J'avais pensé à mettre des templates, mais dans ce cas là, ma classe de base dépend d'un template, et je ne peux plus avoir de pointeur générique dessus. Ou alors, faut éclater le code de la classe mère en 2.


 
Pardon o_O ?

n°910582
lelfe
Posté le 29-11-2004 à 19:22:47  profilanswer
 

Joel F a écrit :

Pardon o_O ?


 
Dites si je me trompe mais si je fais ca :
 

Code :
  1. template <typename T>
  2. class MetaClass {
  3. };
  4. class Class1 : public Metaclass<Class1> {
  5. };


 
Je pourrai plus faire un  
 
 MetaData *obj = new Class1(); ?

n°910583
Lam's
Profil: bas.
Posté le 29-11-2004 à 19:25:37  profilanswer
 

Non, mais rien n'empêche de faire dériver toutes les MetaClass<T> d'une MetaClassBase, complètement abstraite.  
 
Certains (dont moi) prennent d'ailleurs l'habitude de faire souvent dériver (enfin, quand c'est nécessaire) leurs classes templates d'une classe abstraite pour séparer le code qui est relatif au template du code qui est "général".

n°910587
Taz
bisounours-codeur
Posté le 29-11-2004 à 19:31:00  profilanswer
 

ouais :o

n°910591
lelfe
Posté le 29-11-2004 à 19:40:40  profilanswer
 

Ok, merci, je vais essayer de voir comment je m'en sors... :)

mood
Publicité
Posté le 29-11-2004 à 19:40:40  profilanswer
 

n°911044
Joel F
Real men use unique_ptr
Posté le 30-11-2004 à 10:02:22  profilanswer
 

Lam's a écrit :


Certains (dont moi) prennent d'ailleurs l'habitude de faire souvent dériver (enfin, quand c'est nécessaire) leurs classes templates d'une classe abstraite pour séparer le code qui est relatif au template du code qui est "général".


 
On devrait imprimer ça en corps 100 et le punaisez dans ttes les boites de dev :sweat:

n°911059
Lam's
Profil: bas.
Posté le 30-11-2004 à 10:22:30  profilanswer
 

Joel F a écrit :

On devrait imprimer ça en corps 100 et le punaisez dans ttes les boites de dev :sweat:


Ou alors utiliser des traits. J'ai eu un assez gros projet où le trait me servait effectivement de métaclasse.
 
Pour ceux qui ne voient pas de quoi je parle:
   http://thad.notagoth.org/cpptraits_intro/
 


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

  [C++] Pointeur sur constructeur ou Pointeur sur Classe ?

 

Sujets relatifs
[GTK & C++] compilation de classe avec erreurprob de pointeur
Probleme avec une classe que j'ai heritéprob de surcharge de constructeur
un map<> static dans une classe ?[C++] Tableau de pointeur de tableau
[Class] Constructeur et allocation de mémoire.afficher la valeur d'un pointeur en ada
Petit problème avec un héritage : constructeur incorrect ?[JAVA] Le type Super Classe ne peut être résolu...
Plus de sujets relatifs à : [C++] Pointeur sur constructeur ou Pointeur sur Classe ?


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