template<class T, class D, int K,int FuseLevel = 1, class Enable = void, class Enable1 = void>
struct LODPaintFunc
{
inline static void Execute(T * controller, QGraphicsItem * item, QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget)
{
}
};
template<class D, class T,int FuseLevel>
struct LODPaintFunc<T,D,0,FuseLevel,typename boost::enable_if<IsRoute<T>>::type,typename boost::enable_if_c<(FuseLevel>=0)>::type>
{
inline static void Execute(T * controller, QGraphicsItem * item, QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget)
{
}
};
template<class T, class D,int FuseLevel>
struct LODPaintFunc<T,D,1,FuseLevel,typename boost::enable_if<IsRoute<T>>::type,typename boost::enable_if_c<(FuseLevel>=0)>::type>
{
inline static void Execute(T * controller, QGraphicsItem * item, QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget)
{
LODPaintFunc<T,D,0,FuseLevel-1>::Execute(controller, item, painter,option, widget);
...
}
};
template<class T, class D,int FuseLevel>
struct LODPaintFunc<T,D,2,FuseLevel,typename boost::enable_if<IsRoute<T>>::type,typename boost::enable_if_c<(FuseLevel>=0)>::type>
{
inline static void Execute(T * controller, QGraphicsItem * item, QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget)
{
LODPaintFunc<T,D,0,FuseLevel-1>::Execute(controller, item, painter,option, widget);
LODPaintFunc<T,D,1,FuseLevel-1>::Execute(controller, item, painter,option, widget);
...
}
};
template<class T, class D,int FuseLevel>
struct LODPaintFunc<T,D,3,FuseLevel,typename boost::enable_if<IsRoute<T>>::type,typename boost::enable_if_c<(FuseLevel>=0)>::type>
{
inline static void Execute(T * controller, QGraphicsItem * item, QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget)
{
LODPaintFunc<T,D,0,FuseLevel-1>::Execute(controller, item, painter,option, widget);
LODPaintFunc<T,D,1,FuseLevel-1>::Execute(controller, item, painter,option, widget);
LODPaintFunc<T,D,2,FuseLevel-1>::Execute(controller, item, painter,option, widget);
...
}
};
{
... inside the actual code ...
LODPaintFunc<T,D,2>::Execute(controller, item, painter, option, widget);
}