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

Manipulation de templates

2 réponses
Avatar
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

2 réponses

Avatar
Jean-Marc Bourguet
Frederic Bour writes:

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

Avatar
Frederic Bour
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 writes:

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+