Issues mentioned
Code compiles with : -std=c++11
Online compiled:
stacked-crooked
#include <iostream> #include <iostream> #include <boost/bind.hpp> #include <boost/bind/placeholders.hpp> #include <boost/ref.hpp> #include <boost/fusion/container/vector.hpp> #include <boost/fusion/include/vector.hpp> #include <boost/fusion/container/vector/vector_fwd.hpp> #include <boost/fusion/include/vector_fwd.hpp> #include <boost/fusion/algorithm/iteration/for_each.hpp> #include <boost/fusion/include/for_each.hpp> namespace fusion = boost::fusion; template<typename T> class Base { protected: int get_result() const{ return static_cast<const T*>(this)->a; } }; class TYPE_1 : public Base<TYPE_1> { friend class Base<TYPE_1>; int a{1}; public: using Base<TYPE_1>::get_result; }; class TYPE_2 : public Base<TYPE_2> { friend class Base<TYPE_2>; int a{2}; public: using Base<TYPE_2>::get_result; }; class TYPE_3 : public Base<TYPE_3> { friend class Base<TYPE_3>; int a{3}; public: using Base<TYPE_3>::get_result; }; struct Stateful { int sum_result{0}; }; struct Iterater { template<typename T> void operator()(Stateful& state, const T& t) const{ state.sum_result += t.get_result(); } }; int main(){ fusion::vector<TYPE_1, TYPE_2, TYPE_3> vec{TYPE_1(), TYPE_2(), TYPE_3()}; Stateful state; fusion::for_each(vec, boost::bind<void>(Iterater(), boost::ref(state), _1)); std::cout << state.sum_result << std::endl; //print 6 }
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.