Hi, I have a function where I think mpl::for_each might be use full, but I can not get it to work: template<typename SYM> BaseGamePlateHash holdClear(const BaseGamePlateHash& h) { struct ClearSymbol { ClearSymbol(BaseGamePlateHash& h) : hash(h) { } template <typename _SYM> void operator()(_SYM) { hash.clear<_SYM>(); } BaseGamePlateHash& hash; }; BaseGamePlateHash new_hash = h; typedef typename boost::mpl::remove< SymbolCounts, SYM>::type ClearSymbols; ClearSymbol clearsymbol(new_hash); clearsymbol(SYM()); // this is working //boost::mpl::for_each< boost::mpl::vector<SYM> >( clearsymbol ); // not compiling, this is just a simple test //boost::mpl::for_each< ClearSymbols >( clearsymbol ); // not compiling, this is what I want to do... return new_hash; } I had the impression that the following two statements would do the same: clearsymbol(SYM()); // this is working should be equal to: boost::mpl::for_each< boost::mpl::vector<SYM> >( clearsymbol ); // not compiling But this does not seems to be the case... This is the compile error I get when enabling: boost::mpl::for_each< boost::mpl::vector<SYM> >( clearsymbol ); test7.cxx:303:13: error: 'holdClear(const BaseGamePlateHash &)::ClearSymbol::operator()(SymbolCntDice)::ClearSymbol::hash' is not a member of class 'ClearSymbol' hash.clear<_SYM>(); ^ /usr/local/include/boost/mpl/for_each.hpp:75:9: note: in instantiation of function template specialization 'holdClear(const BaseGamePlateHash &)::ClearSymbol::operator()<SymbolCntDice>' requested here aux::unwrap(f, 0)(boost::get(x)); ^ /usr/local/include/boost/mpl/for_each.hpp:100:5: note: in instantiation of function template specialization 'boost::mpl::aux::for_each_impl<false>::execute<boost::mpl::v_iter<boost::mpl::vector<SymbolCntDice, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, 0>, boost::mpl::v_iter<boost::mpl::vector<SymbolCntDice, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, 1>, boost::mpl::identity<mpl_::na>, ClearSymbol>' requested here aux::for_each_impl< boost::is_same<first,last>::value > ^ /usr/local/include/boost/mpl/for_each.hpp:111:5: note: in instantiation of function template specialization 'boost::mpl::for_each<boost::mpl::vector<SymbolCntDice, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::mpl::identity<mpl_::na>, ClearSymbol>' requested here for_each<Sequence, identity<> >(f); ^ test7.cxx:313:5: note: in instantiation of function template specialization 'boost::mpl::for_each<boost::mpl::vector<SymbolCntDice, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, ClearSymbol>' requested here boost::mpl::for_each< boost::mpl::vector<SYM> >( clearsymbol ); ^ test7.cxx:437:36: note: in instantiation of function template specialization 'holdClear<SymbolCntDice>' requested here BaseGamePlateHash hh = holdClear<SYM>( h ); ^ test7.cxx:386:13: note: in instantiation of function template specialization 'BaseGamePreCalc::create_hold_actions<SymbolCntDice>' requested here create_hold_actions<SymbolCntDice>(hash_enum.first); ^ 1 error generated. So, what have I done wrong? Best regards Allan W. Nielsen
on Fri Jan 13 2012, Allan Nielsen <a-AT-awn.dk> wrote:
boost::mpl::for_each< boost::mpl::vector<SYM> >( clearsymbol ); // not compiling
But this does not seems to be the case...
Try making your operator() const. HTH, -- Dave Abrahams BoostPro Computing http://www.boostpro.com
participants (2)
-
Allan Nielsen
-
Dave Abrahams