Listing 9

template<class ValueType, class NameTag,class Scope> 
void operator()(ValueType &, NameTag ,EnterAttributeTag, Scope*)
{ /* whatever needs to be done */        }

template<class ValueType, class NameTag,class Scope> 
void operator()(ValueType &, NameTag, LeaveAttributeTag, Scope*)
{ /* whatever needs to be done */        }

template<class ValueType, class NameTag,class Scope> 
void operator()(ValueType&,NameTag , EnterReflectedClassTag,Scope*)
{ /* whatever needs to be done */        }

template<class ValueType, class NameTag,class Scope> 
void operator()(ValueType&,NameTag , LeaveReflectedClassTag,Scope*)
{ /* whatever needs to be done */        }

template<class CollectionType, class NameTag,class Scope> 
void operator()(CollectionType&, NameTag , EnterCollectionTag, Scope*)
{ /* whatever needs to be done */        }

template<class CollectionType, class NameTag,class Scope> 
void operator()(CollectionType&, NameTag, LeaveCollectionTag, Scope*)
{ /* whatever needs to be done */        }

 
template<class ValueType, class NameTag,class Scope> 
void operator()(ValueType&,NameTag, EnterCollItemTag, Scope*)
{ /* whatever needs to be done */        }

template<class ValueType, class NameTag,class Scope> 
void operator()(ValueType&,NameTag, LeaveCollItemTag , Scope*)
{ /* whatever needs to be done */        }

template<class ValueType, class NameTag,class Scope> 
void operator()(ValueType& value,NameTag, Scope*)
{ /* do something to process a "leaf" value*/         }