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> >
{
...
};
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
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
Frederic Bour <fred@tigen.org> 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
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
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+
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 <fred@tigen.org> 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;
...
};
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; ... };