2 votes

Comment vérifier si un objet est une instance d'une classe modèle en C++ ?

Comment puis-je vérifier si une variable est une classe template sans connaître l'argument template, donc dans l'exemple ci-dessous, comment puis-je déterminer (prouver) que A<int> est un A.

template <class T>
class A {/*----*/};

int main() {
    auto a1 = A<int>();
    bool is_a1_an_A = some_method(a1, A);
}

Toute aide est la bienvenue. Merci !

2voto

Sam Varshavchik Points 2563

L'utilisation d'une classe d'aide spécialisée est assez simple :

#include <type_traits>
#include <iostream>

template<typename T> class A {};

template<typename T>
struct is_a : std::false_type {};

template<typename T>
struct is_a<A<T>> : std::true_type {};

int main()
{
    auto a1=A<int>{};

    bool b1=false;

    std::cout << is_a<decltype(a1)>::value << std::endl;

    std::cout << is_a<decltype(b1)>::value << std::endl;
    return 0;
}

is_a est spécialisé pour un paramètre de modèle qui est une instance de A . La version non spécialisée est le faux trait, et la version spécialisée est le vrai trait, et c'est à peu près tout. Si vous n'êtes pas familier avec le sujet de la spécialisation des modèles, il s'agit d'un sujet assez complexe et profond qui devrait avoir une explication complète dans tout bon manuel C++, et je vous y renvoie pour une discussion complète sur ce sujet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X