Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Héritage d'un type créé à l'aide d'un param d'une template.

2 réponses
Avatar
Stephane Wirtel
Bonjour,

J'ai défini une classe template prenant le type de collection comme paramètre template.

template< typename ParamCollection >
class AbstractConstraint
{
protected:
typedef ParamCollection Collection;
};

template <typename DataType>
class NoConstraint : public AbstractConstraint< std::list < DataType * > >
{
public:
virtual void insert (DataType *pDataType) throw (std::exception) {
Collection collection;
}
};

Cela me semble correct, mais g++ 3.4.4 m'informe qu'il ne trouve pas la définition
de mon type "Collection" qui pourtant est définit à l'aide d'un typedef dans ma classe Abstraite.

Quelqu'un aurait-il une idée ?

Merci

Stef

2 réponses

Avatar
Jean-Marc Bourguet
Stephane Wirtel writes:

Bonjour,

J'ai défini une classe template prenant le type de collection comme paramètre template.

template< typename ParamCollection >
class AbstractConstraint
{
protected:
typedef ParamCollection Collection;
};

template <typename DataType>
class NoConstraint : public AbstractConstraint< std::list < DataType * > >
{
public:
virtual void insert (DataType *pDataType) throw (std::exception) {
Collection collection;
}
};

Cela me semble correct, mais g++ 3.4.4 m'informe qu'il ne trouve pas la définition
de mon type "Collection" qui pourtant est définit à l'aide d'un typedef dans ma classe Abstraite.

Quelqu'un aurait-il une idée ?


Utilise:

typename NoConstraint::Collection collection;

Le probleme est que Collection tout seul est un nom non qualifie, hors
les noms non qualifies ne sont pas cherche dans ce qui depend des
parametres templates, et c'est le cas pour la classe de base de
NoConstaint. Donc il faut le qualifier pour qu'il soit chercher, d'ou
le NoConstraint::

Le typename est necessaire lui parce que NoConstraint::Collection est
un nom dependant, et que les noms dependant doivent etre precede de
typename s'ils sont des types...

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Stephane Wirtel
Merci,

Effectivement cela fonctionne mieux de cette manière, je prends note de la remarque.

Stef