Un vecteur hétérogène

pgl10 Messages postés 381 Date d'inscription samedi 18 décembre 2004 Statut Non membre Dernière intervention 25 avril 2024 - 18 août 2018 à 01:50
pgl10 Messages postés 381 Date d'inscription samedi 18 décembre 2004 Statut Non membre Dernière intervention 25 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.

https://codes-sources.commentcamarche.net/source/102774-un-vecteur-heterogene

pgl10 Messages postés 381 Date d'inscription samedi 18 décembre 2004 Statut Non membre Dernière intervention 25 avril 2024 11
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.
Rejoignez-nous