Je voudrais savoir s'il y a un moyen de pr=E9ciser qu'une classe
param=E8tre d'un template doit avoir un certain type (h=E9riter d'une
certaine interface).
Si on a une interface I, dont sont d=E9riv=E9s A et B, comment faire:
template <I IDeriv=E9> class Truc {... //le reste utilise la classe
param=E8tre en =E9tant s=FBre qu'elle dispose de l'interface I.
J'aimerais ne pas faire appel au RTTI si je peux l'=E9viter, surtout
s'il y a un moyen propre de faire =E7a.
Merci d'avance.
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
Jean-Marc Bourguet
"Vivien Parlat" writes:
Je voudrais savoir s'il y a un moyen de préciser qu'une classe paramètre d'un template doit avoir un certain type (hériter d'une certaine interface).
Il n'y a pas encore de moyen simple; il y a quelques moyens detournes (cherche concept checking).
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
"Vivien Parlat" <pocky6@gmail.com> writes:
Je voudrais savoir s'il y a un moyen de préciser qu'une classe
paramètre d'un template doit avoir un certain type (hériter d'une
certaine interface).
Il n'y a pas encore de moyen simple; il y a quelques moyens detournes
(cherche concept checking).
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
Je voudrais savoir s'il y a un moyen de préciser qu'une classe paramètre d'un template doit avoir un certain type (hériter d'une certaine interface).
Il n'y a pas encore de moyen simple; il y a quelques moyens detournes (cherche concept checking).
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
Falk Tannhäuser
Vivien Parlat wrote:
Je voudrais savoir s'il y a un moyen de préciser qu'une classe paramètre d'un template doit avoir un certain type (hériter d'une certaine interface).
Si tu peux utiliser Boost <http://www.boost.org> :
C'est la définition de C# (quatre '+' placés en carré).
loic.actarus.joly
Pour faire un #, deux + suffisent...
Et en passant, la gestion des génériques et du concept checking associé en C# est bien plus simple qu'en C++. Avec les avantages et inconvénients qui vont avec la simplicité.
Pour faire un #, deux + suffisent...
Et en passant, la gestion des génériques et du concept checking
associé en C# est bien plus simple qu'en C++. Avec les avantages et
inconvénients qui vont avec la simplicité.
Et en passant, la gestion des génériques et du concept checking associé en C# est bien plus simple qu'en C++. Avec les avantages et inconvénients qui vont avec la simplicité.
Gilles
Bonjour,
Je suis récemment tombé sur un bout de code qui pourrait t'intéresser. Tel qu'il était présenté, ce code permettait d'implémenter un classe Array qui gère deux types de données: ceux qui dérivent d'une classe Clonable d'une part et tous les autres d'autre part. En détournant un peu ce code (cf ci-dessous), on arrive à quelquechose qui pourrait t'être utile.
NB: Je ne sais pas trop dans quelle mesure ce code est portable (qu'en disent les spécialistes ?) mais il compile au moins avec VC.NET.
Cordialement,
Gilles.
template <class BaseClass, class Class> class Inherit { private: class Yes { int a; }; class No { int a[4]; }; static Yes Test(BaseClass*); static No Test(...); // NB: il n'est pas utile de definir les fonctions Test ; elles // ne sont jamais appelees. public: // Is vaut 1 ssi Class derive de BaseClass enum { Is = (sizeof(Test((Class*)0)) == sizeof(Yes) ? 1: 0) }; };
int main() { Truc<Machin> t1; // ok Truc<int> t2; // erreur }
Bonjour,
Je suis récemment tombé sur un bout de code qui pourrait t'intéresser.
Tel qu'il était présenté, ce code permettait d'implémenter un classe Array
qui gère deux types de données: ceux qui dérivent d'une classe Clonable
d'une part et tous les autres d'autre part. En détournant un peu ce code (cf
ci-dessous), on arrive à quelquechose qui pourrait t'être utile.
NB: Je ne sais pas trop dans quelle mesure ce code est portable (qu'en
disent les spécialistes ?) mais il compile au moins avec VC.NET.
Cordialement,
Gilles.
template <class BaseClass, class Class>
class Inherit
{
private:
class Yes { int a; };
class No { int a[4]; };
static Yes Test(BaseClass*);
static No Test(...);
// NB: il n'est pas utile de definir les fonctions Test ; elles
// ne sont jamais appelees.
public:
// Is vaut 1 ssi Class derive de BaseClass
enum { Is = (sizeof(Test((Class*)0)) == sizeof(Yes) ? 1: 0) };
};
Je suis récemment tombé sur un bout de code qui pourrait t'intéresser. Tel qu'il était présenté, ce code permettait d'implémenter un classe Array qui gère deux types de données: ceux qui dérivent d'une classe Clonable d'une part et tous les autres d'autre part. En détournant un peu ce code (cf ci-dessous), on arrive à quelquechose qui pourrait t'être utile.
NB: Je ne sais pas trop dans quelle mesure ce code est portable (qu'en disent les spécialistes ?) mais il compile au moins avec VC.NET.
Cordialement,
Gilles.
template <class BaseClass, class Class> class Inherit { private: class Yes { int a; }; class No { int a[4]; }; static Yes Test(BaseClass*); static No Test(...); // NB: il n'est pas utile de definir les fonctions Test ; elles // ne sont jamais appelees. public: // Is vaut 1 ssi Class derive de BaseClass enum { Is = (sizeof(Test((Class*)0)) == sizeof(Yes) ? 1: 0) }; };