2010-10-30 3 views
0

Quelqu'un peut-il m'expliquer comment énumérer un BOOST_ENUM en utilisant BOOST_FOREACH? L'exemple ci-dessous montre que je l'ai eu pour fonctionner avec std :: for_each, mais pas avec BOOST_FOREACH.Comment énumérer un BOOST_ENUM avec BOOST_FOREACH?

Exemple de code:

BOOST_ENUM_VALUES( MyEnum, 
    const char *, 
     (xMin)("xMin") 
     (xMax)("xMax") 
     (yMin)("yMin") 
     (yMax)("yMax") 
); 

void blah(const MyEnum & val) // working demo with std_foreach 
{ 
    std::cout << "index=" << val.index() << " val=" << val.value() << " str=" << val.str() << std::endl; 
} 


void foo() 
{ 
    //BOOST_FOREACH : does not compile... 
    BOOST_FOREACH(MyEnum myEnum, MyEnum()) // I tried to construct a "dummy" enum in order to use its iterator with no luck... 
    { 
    std::cout << "index=" << myEnum.index() << " val=" << myEnum.value() << " str=" << myEnum.str() << std::endl; 
    } 

    //std::for_each : works... 
    std::for_each(MyEnum::begin(), MyEnum::end(), blah); 

} 

Un grand merci à l'avance! Edit: comme mentionné dans la réponse, le code fonctionne avec la plus récente base de code de boost.

+0

Est-ce la bibliothèque d'énumération sécurisée de type Vault? Ou a-t-il été accepté en boost? –

+0

Vous avez raison, c'est celui du coffre-fort. –

Répondre

1

Votre exemple de code ci-dessus se compile et s'exécute très bien pour moi avec gcc 4.5.1 et vc2010 (après avoir ajouté les # inclus, c'est-à-dire). J'ai essayé avec enum_rev4.6 de la voûte. Quelles erreurs de compilation voyez-vous?

+0

Merci pour votre réponse: l'erreur que je vois est "erreur C2039: 'itérateur': n'est pas un membre de 'MyEnum'". J'utilise VS2005 et une ancienne version boost (1.34). Je suppose qu'il est temps pour moi de mettre à jour :-) –

Questions connexes