Maison > Article > développement back-end > Comment puis-je déterminer si un type est un conteneur STL au moment de la compilation ?
Déterminer si un type est un conteneur STL au moment de la compilation
Dans de nombreux scénarios de programmation, il peut être avantageux de savoir si un le type spécifique est un conteneur STL au moment de la compilation. Cela permet d'optimiser les algorithmes ou les structures de données en fonction du type de conteneur utilisé.
Une approche consiste à utiliser une structure de modèle pour déterminer le type de conteneur :
struct is_cont{}; struct not_cont{}; template <typename T> struct is_cont { typedef not_cont result_t; };
Cependant, cette approche nécessite de créer des spécialisations pour chaque type de conteneur STL, telles que std :: vector et std :: deque.
Une solution plus complète implique l'utilisation d'une classe d'assistance templates :
template<typename T> struct is_container : std::integral_constant<bool, has_const_iterator<T>::value && has_begin_end<T>::beg_value && has_begin_end<T>::end_value> { };
Ce modèle de classe vérifie les propriétés suivantes :
Utilisation示例:
std::cout << is_container<std::vector<int>>::value << std::endl; // true std::cout << is_container<std::list<int>>::value << std::endl; // true std::cout << is_container<std::map<int>>::value << std::endl; // true std::cout << is_container<std::set<int>>::value << std::endl; // true std::cout << is_container<int>::value << std::endl; // false
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!