Les listes variables d'arguments sont assez peu supportées en C++. Le problème de base existerait sans parler de constructeurs ou d'héritage :
Si tu as une fonction : int f(string const &s, ...) et une fonction g(string const& s, ...) comment faire pour appeler f depuis g ? Rien n'est prévu pour.
Si vraiment tu voulais faire ça, je verrais deux solution :
- Tu donnes aussi à la classe de base un constructeur qui prend en paramètre un tableau de void*, et dans le constructeur de la classe dérivée tu te débrouille pour transformer cette liste variable en tableau de void*.
- Tu as un compilateur qui implémente déjà les variadic templates de la future norme C++, et tu définis tes deux constructeurs sous le forme de variadic template, et là le transfert est possible. Cette solution n'est pas pour débutant je pense.
Le mieux est effectivement à mon avis de laisser tomber cette façon de définir le constructeur, et de lui passer en argument une chaîne déjà formatée au préalable, ou éventuellement un objet de type boost::format, ce qui permettrait d'écrire :
throw GetoptException(format("Error - Syntax error, invalid parameter %1% at line %2%") % p_key % p_line);
Partager