pgl10
Messages postés381Date d'inscriptionsamedi 18 décembre 2004StatutNon membreDernière intervention25 avril 2024
-
18 août 2018 à 01:50
pgl10
Messages postés381Date d'inscriptionsamedi 18 décembre 2004StatutNon membreDernière intervention25 avril 2024
-
23 août 2018 à 07:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
pgl10
Messages postés381Date d'inscriptionsamedi 18 décembre 2004StatutNon membreDernière intervention25 avril 202411 23 août 2018 à 07:57
Bonjour,
Au lieu de programmer : if(a.type() == typeid(int)) ...
pour contrôler que le boost::any a contient un int on peut aussi utiliser :
// Pour savoir si any contient un type désigné
template <typename T>
bool is_type(const boost::any& any)
{
return (!any.empty() && boost::any_cast<T>(&any));
}
et faire : if(is_tape<int>(a)) ... Et de même pour les autres entités.
On peut aussi connaître directement le type de l'entité contenue dans un boost::any avec :
// Pour connaître le type d'un boost::any
std::string type_name(const boost::any& any)
{
if(any.empty()) return "";
if(is_type<std::string>(any)) return "std::string";
return any.type().name();
}
Ces deux fonctions fonctionnent avec les entités du C++ et celles de l'utilisateur.
23 août 2018 à 07:57
Au lieu de programmer : if(a.type() == typeid(int)) ...
pour contrôler que le boost::any a contient un int on peut aussi utiliser :
et faire : if(is_tape<int>(a)) ... Et de même pour les autres entités.
On peut aussi connaître directement le type de l'entité contenue dans un boost::any avec :
Ces deux fonctions fonctionnent avec les entités du C++ et celles de l'utilisateur.