J'ai un simple classe A avec deux constructeurs. L'un d'entre eux a des paramètres veriadiques. Et la classe B n'est que la classe dérivée et je souhaite instancier la classe B à l'aide des constructeurs dérivés de la classe A.
Tout fonctionne jusqu'à ce que je souhaite utiliser la particularité des arguments variadiques. La dernière déclaration provoque une erreur de compilateur disant: P>
Do something Do something Do something else Do something else ERROR :(
3 Réponses :
Vous devez hériter des fonctions avec des arguments variadiques séparément.
[modifier] p> de cette façon, votre constructeur appelle dans et la sortie serait: p> Main () Code> travaillerait parfaitement. p>
Tout d'abord, je veux mentionner que Arguments variadiques strong> est une fonctionnalité linguistique moderne C ++ fournit de type Save alternatives comme Toutefois, cela dit maintenant une solution possible. p> J'ai trouvé une fois quand j'ai essayé d'imiter quelque chose de similaire comme C'est l'idée de base, j'ai essayé de résoudre le dilemme de OP: P> printf () code>. A cette époque, j'ai remarqué l'existence de vprintf () code > et obtenu pourquoi et pour ce qu'il est bon pour. P> Test flavors of A::A():
A a1(1.23f);
A::A(1.23)
A a2(3, 1.2f, 2.3f, 3.4f);
A::A(3, 1.2, 2.3, 3.4)
Test flavors of B::B():
B b1(1.23f);
A::A(1.23)
in B::B(float)
B b2(3, 1.2f, 2.3f, 3.4f);
A::A()
in B::B(3, 1.2, 2.3, 3.4)
Tout cela était déjà clair pour moi. Je ne voulais tout simplement pas écrire le constructeur pour toujours une nouvelle classe dérivée de A. mais merci néanmoins
Vous n'avez pas perdu mon temps: D. Je n'étais probablement pas assez clair sur mon problème. Et votre réponse était excellente pour les autres se plaignant de problèmes similaires. Je suis toujours heureux quand quelqu'un répond: D
@MoritzsePpelt Il n'est pas trop tard pour affiner votre question. Il suffit d'utiliser Modifier Link sous votre question ... ;-)
@Ekin: votre idée est géniale. Le code suivant satisfait à tous mes souhaits (je dois simplement faire un cas particulier pour le constructeur veradique: D).
class B : public A {
public:
using A::A; // Takes care of all normal constructors
B(int a, int ...) :A(a) {} // Takes care of the veradic constructor
};
Non liée: votre compilateur vous dit "désolé" i> en fait? Qu'est-ce que vous utilisez?
J'utilise la déclaration G ++ pour compiler.
g ++ -v code> me dit:GCC version 7.4.0 code>Il utilise
gcc code>.Clang 8.0.0 Code> compile ce code sans problème.Alors, est ma seule option pour changer le compilateur ?!
Les devs GCC ont délibérément choisi de ne pas mettre en œuvre cette fonctionnalité (encore). Vous ne pouvez pas changer cela, de contribuer à GCC vous-même. Alors oui, la modification des compilateurs serait le seul recours immédiatement disponible.
Il reproduit également cette erreur avec un version de GCC plus récente . Je me demandais simplement de ce type de message d'erreur poli :-D.
Si vous souhaitez toujours utiliser GCC, avez-vous regardé Modèles VARIADIC ?
Mmh, ok. C'est malheureux cependant. Avez-vous un conseil?
L'utilisation de modèles verdiques n'est triniment pas d'option, car ma classe réelle utilise déjà ces.