arguments par défaut

arguments par défaut - C++ - Programmation

Marsh Posté le 01-03-2010 à 17:42:33    

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.

Reply

Marsh Posté le 01-03-2010 à 17:42:33   

Reply

Marsh Posté le 01-03-2010 à 17:55:48    

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)
Reply

Marsh Posté le 01-03-2010 à 18:56:20    

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?

Reply

Marsh Posté le 01-03-2010 à 19:22:53    

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)
Reply

Marsh Posté le 01-03-2010 à 19:50:58    

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

Reply

Marsh Posté le 01-03-2010 à 20:01:03    

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 ^^.

Reply

Marsh Posté le 01-03-2010 à 21:20:51    

ohohoh t'en a trop dit :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed