Manipulation de templates

Le
Frederic Bour
Bonjour à tous,

J'approfondie un peu la programmation générique, et donc je me torture
l'esprit avec des cas un peu tordus.

Est-il possible de transmettre un template plutot qu'un simple type
comme paramètre template ?
Je n'ai surement pas le vocabulaire adéquate, donc voici un petit exemple.

Je voudrais spécialiser une classe pour détecter ce genre de cas:

template <typename T, typename A, typename B>
class MyClass< T, T<A, B> >
{

};

Ceci dans le but de rendre générique des codes comme:

template<typename A, typename B>
class Match1 {

};

template<typename A, typename B>
class Match2 {

};

template <typename A, typename B>
class MyClass< Match1<A, B> >
{

};

template <typename A, typename B>
class MyClass< Match2<A, B> >
{

};

Merci,

Fred
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Marc Bourguet
Le #6699441
Frederic Bour
Bonjour à tous,

J'approfondie un peu la programmation générique, et donc je me torture
l'esprit avec des cas un peu tordus.

Est-il possible de transmettre un template plutot qu'un simple type comme
paramètre template ?
Je n'ai surement pas le vocabulaire adéquate, donc voici un petit exemple.

Je voudrais spécialiser une classe pour détecter ce genre de cas:

template <typename T, typename A, typename B>
class MyClass< T, T<A, B> >
{
...
};


template<template <typename U> T, typename A, typename B>
class MyClass {
T<A, B> myMember;
...
};

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

Frederic Bour
Le #6699911
Merci pour cette réponse rapide et efficace.
Ca marche parfaitement avec g++ (avec un class/typename devant T).
Par ailleurs, je trouvé entre temps une manière, un peu détournée, de
répondre au problème:

template<template T, typename A, typename B>
class MyClass {
typename T::template SomeClass<A, B> myMember;
...
};

ou T est une classe contenant un template SomeClass comme membre.

Voilà, merci beaucoup. Terriblement puissant ces outils.

Frederic Bour
Bonjour à tous,

J'approfondie un peu la programmation générique, et donc je me torture
l'esprit avec des cas un peu tordus.

Est-il possible de transmettre un template plutot qu'un simple type comme
paramètre template ?
Je n'ai surement pas le vocabulaire adéquate, donc voici un petit exemple.

Je voudrais spécialiser une classe pour détecter ce genre de cas:

template <typename T, typename A, typename B>
class MyClass< T, T<A, B> >
{
...
};


template<template <typename U> T, typename A, typename B>
class MyClass {
T<A, B> myMember;
...
};

A+



Publicité
Poster une réponse
Anonyme