Parent implementation different to child implementation
I'm not sure what your question is about recursiveLevel, but printing only when recursiveLevel == 0 seems like pretty weird behaviour to me.  If you only care about the outermost level of your data structure, then why even bother recursing?

I'm also puzzled by what you are trying to accomplish by introducing the enterChild...() methods.  What does "child" mean — that the method should only be called when recursiveLevel &gt; 0?

Or perhaps you mean to have ReadOnlyFilter::enterClass() chain to the superclass implementation?

struct ReadOnlyFilter: public BaseFilter {
    virtual enterClass(ClassData&amp; classData, int recursiveLevel) {
        if (classData-&gt;isReadOnly()) {  // isReadondOnly() in original code
            BaseFilter::enterClass(classData, recursiveLevel);
        }
    }
    // etc.
}