je souhaiterai écrire une classe template test dérivant de son argument.
Cet argument déclare un constructeur qui prend un ou deux arguments (ou
exclusif).
Supposons que T ne déclare qu'un seul constructeur ne prenant qu'un
argument. Le code suivant est-il légal, si je n'appelle que le
constructeur 1 dans mon code:
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Pierre Barbier de Reuille
Helfer Thomas wrote:
Bonjour,
je souhaiterai écrire une classe template test dérivant de son argument. Cet argument déclare un constructeur qui prend un ou deux arguments (ou exclusif).
Supposons que T ne déclare qu'un seul constructeur ne prenant qu'un argument. Le code suivant est-il légal, si je n'appelle que le constructeur 1 dans mon code:
Oui, c'est légal car une méthode d'une classe template n'est instanciée que si elle est effectivement utilisée (toutefois, toutes les méthodes sont *définies*).
Pierre
Helfer Thomas wrote:
Bonjour,
je souhaiterai écrire une classe template test dérivant de son argument.
Cet argument déclare un constructeur qui prend un ou deux arguments (ou
exclusif).
Supposons que T ne déclare qu'un seul constructeur ne prenant qu'un
argument. Le code suivant est-il légal, si je n'appelle que le
constructeur 1 dans mon code:
Oui, c'est légal car une méthode d'une classe template n'est instanciée
que si elle est effectivement utilisée (toutefois, toutes les méthodes
sont *définies*).
je souhaiterai écrire une classe template test dérivant de son argument. Cet argument déclare un constructeur qui prend un ou deux arguments (ou exclusif).
Supposons que T ne déclare qu'un seul constructeur ne prenant qu'un argument. Le code suivant est-il légal, si je n'appelle que le constructeur 1 dans mon code:
Oui, c'est légal car une méthode d'une classe template n'est instanciée que si elle est effectivement utilisée (toutefois, toutes les méthodes sont *définies*).
Pierre
kanze
Pierre Barbier de Reuille wrote:
Helfer Thomas wrote:
je souhaiterai écrire une classe template test dérivant de son argument. Cet argument déclare un constructeur qui prend un ou deux arguments (ou exclusif).
Supposons que T ne déclare qu'un seul constructeur ne prenant qu'un argument. Le code suivant est-il légal, si je n'appelle que le constructeur 1 dans mon code:
template<typename T> struct test : public T { // Constructeur 1 test(const typename T::first_arg src) : T(src) {}
Oui, c'est légal car une méthode d'une classe template n'est instanciée que si elle est effectivement utilisée (toutefois, toutes les méthodes sont *définies*).
Je crois qu'il y a un petit problème de vocabulaire ici. « Définir » une fonction, c'est fournir son implémentation. Les declarations de toutes les fonctions membre de la classe template sont instanciées, mais les définitions n'en sont instanciées que si la fonction est utilisée (selon la définition d'« utilisée » que donne la norme -- par exemple, une fonction virtuelle est « utilisée » dès qu'il y a une instance de la classe).
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Pierre Barbier de Reuille wrote:
Helfer Thomas wrote:
je souhaiterai écrire une classe template test dérivant de
son argument. Cet argument déclare un constructeur qui
prend un ou deux arguments (ou exclusif).
Supposons que T ne déclare qu'un seul constructeur ne
prenant qu'un argument. Le code suivant est-il légal, si je
n'appelle que le constructeur 1 dans mon code:
template<typename T>
struct test
: public T
{
// Constructeur 1
test(const typename T::first_arg src)
: T(src)
{}
Oui, c'est légal car une méthode d'une classe template n'est
instanciée que si elle est effectivement utilisée (toutefois,
toutes les méthodes sont *définies*).
Je crois qu'il y a un petit problème de vocabulaire ici.
« Définir » une fonction, c'est fournir son implémentation.
Les declarations de toutes les fonctions membre de la classe
template sont instanciées, mais les définitions n'en sont
instanciées que si la fonction est utilisée (selon la définition
d'« utilisée » que donne la norme -- par exemple, une
fonction virtuelle est « utilisée » dès qu'il y a une instance
de la classe).
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
je souhaiterai écrire une classe template test dérivant de son argument. Cet argument déclare un constructeur qui prend un ou deux arguments (ou exclusif).
Supposons que T ne déclare qu'un seul constructeur ne prenant qu'un argument. Le code suivant est-il légal, si je n'appelle que le constructeur 1 dans mon code:
template<typename T> struct test : public T { // Constructeur 1 test(const typename T::first_arg src) : T(src) {}
Oui, c'est légal car une méthode d'une classe template n'est instanciée que si elle est effectivement utilisée (toutefois, toutes les méthodes sont *définies*).
Je crois qu'il y a un petit problème de vocabulaire ici. « Définir » une fonction, c'est fournir son implémentation. Les declarations de toutes les fonctions membre de la classe template sont instanciées, mais les définitions n'en sont instanciées que si la fonction est utilisée (selon la définition d'« utilisée » que donne la norme -- par exemple, une fonction virtuelle est « utilisée » dès qu'il y a une instance de la classe).
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34