Je pourrais bien sûr utiliser is_base
si la classe de base n'était pas un modèle. Cependant, quand c'est le cas, je ne vois aucun moyen de faire correspondre génériquement n'importe quel type dérivé. Voici un exemple de base de ce que je veux dire:Est-il possible de faire correspondre la base modèle dans les spécialisations de modèle?
#include <boost/mpl/bool.hpp>
template < typename T >
struct test_base
{
};
template < typename T >
struct check : boost::mpl::false_ {};
template < typename T >
struct check<test_base<T> > : boost::mpl::true_ {};
struct test_derived : test_base<int> {};
#include <iostream>
int main()
{
std::cout << check<test_derived>::value << std::endl;
std::cin.get();
}
Je veux que revenir true_
plutôt que false_
. L'exemple réel a comme 7 paramètres de modèle, la plupart par défaut, et utilise Boost.Parameter pour s'y référer par son nom. Afin d'utiliser is_base
je devrais être en mesure de tirer les paramètres en quelque sorte et je ne vois pas un moyen de faire cela à court de déclarer les typedefs internes.
Je pense que c'est impossible. Vous cherchez à avoir tort.
peut vous présenter le type de marqueur unique dans la base de test et l'activation/désactivation basé sur cela? – Anycorn
C'est une option viable que j'aurais dû penser à moi-même. Toujours intéressé si quelqu'un peut trouver un moyen de contourner sans cela si. –
@aaa - vous devriez en faire une réponse. J'ai l'impression que c'est la seule méthode possible, alors dans quelques jours après que je ne reçois aucune réponse, vous pouvez aussi obtenir un crédit pour cela. –