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

  FORUM HardWare.fr
  Programmation
  C++

  arguments par défaut

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

arguments par défaut

n°1970285
snafu8
Posté le 01-03-2010 à 17:42:33  profilanswer
 

Salut à tous,
 
je cherche à passer à une fonction des arguments par défaut d'un type non standard (une référence vers une instance d'une classe définie dans mon code). Y'a-t-il un moyen de faire ça. Concretement :
 

Code :
  1. void mafonction(maclasse<T1> &input1, maclasse<T1> &input2, int toto, int blabla, maclasse<T2> &mon_parametre_par_defaut = 0)


 
J'entrevois des moyens de le faire (caster 0 en maclasse<T2>, par exemple), mais tout ça m'a l'air assez sale. Quelle serait la bonne solution?
 
S.

mood
Publicité
Posté le 01-03-2010 à 17:42:33  profilanswer
 

n°1970291
Un Program​meur
Posté le 01-03-2010 à 17:55:48  profilanswer
 

En supposant que 0 soit implicitement convertible en maclasse<T> (par un constructeur non explicite prenant un int par exemple), il reste un double probleme:
- tu veux une reference non const, 0 ne sera jamais autorise;
- meme si tu prends une reference const, comme c'est la seule apparition de T2, T2 ne sera jamais deduit.
 
Apres avoir ajoute un const pour que le dernier parametre soit constant et specifie explicitement T2, ca devrait compiler:

Code :
  1. mafonction<double, double> (v1, v1, 1, 2);



---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1970311
snafu8
Posté le 01-03-2010 à 18:56:20  profilanswer
 

Ok,
 
j'ai pas été clair, je crois. J'avais mis T1 et T2 pour indiquer que les types sont différents, mais ils sont explicites dans le code (int et float64). D'après ce que tu m'expliques, j'ai deux solutions, soit je mets mon paramètre par défaut comme référence constante et je défini
 

Code :
  1. maclasse(int toto);


 
soit (peut être la solution la plus fool-proof) je surcharge fonction comme ça :  
 

Code :
  1. fonction(maclasse<T1>, maclasse<T1>, int, int);
  2. fonction(maclasse<T1>, maclasse<T1>, int, int, maclasse<T2> );


 
La question que je me pose toujours est : que faut il faire pour que, quand je défini une classe, elle puisse avoir un élément nul?

n°1970320
Un Program​meur
Posté le 01-03-2010 à 19:22:53  profilanswer
 

Je ne vois pas l'intérêt d'avoir systématiquement un élément exceptionnel, et je vois un intérêt à parfois ne pas en avoir.
 
En général, je préfère la surcharge aux arguments par défaut (les arguments ayant un défauts peuvent ne pas être à la fin, on n'a pas de mauvaise surprise quand on veut un pointeur de fonction, ...)


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1970340
Joel F
Real men use unique_ptr
Posté le 01-03-2010 à 19:50:58  profilanswer
 

surcharge toujours, les référence avec un "par defaut", ca sent la paté

n°1970348
snafu8
Posté le 01-03-2010 à 20:01:03  profilanswer
 

Je suis d'accord avec vous pour la surcharge. Après y avoir réfléchi, mon idée de départ était un peu pourrave et j'ai un peu honte d'avouer que je n'avais pas pensé à la surcharge tout de suite.  
@Joel, pour le coup je suis content de ne pas avoir register avec mon prénom, sinon je pense que j'en aurais pris plein la tronche ^^.

n°1970381
Joel F
Real men use unique_ptr
Posté le 01-03-2010 à 21:20:51  profilanswer
 

ohohoh t'en a trop dit :o


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

  arguments par défaut

 

Sujets relatifs
IE par défautarguments passés en ligne de commande
URGENT - Modification des paramètres par défaut d'un graphique croisé Par défaut PhysX: comment ajouter plus de torque ?
agrandir vignette - image par défautArguments en C
Par défaut d'un format de message en pseudo BNF à une expression regu[VBA Excel 2007] erreur Nombre d'arguments incorrects [RESOLU]
Passage d'arguments par défaut dans constructeur 
Plus de sujets relatifs à : arguments par défaut


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