Figure 3: Using multiple shim classes

class IBase
{
public:
    virtual void First()=0;
    virtual void Second()=0;
};

template <class Derived, class Base>
class SFirstShim
{
public:
    virtual void First() { ... }
};

template <class Derived, class Base>
class SSecondShim
{
public:
    virtual void Second() { ... }
};

class Nested 
    : public SFirstShim<Nested, SSecondShim<Nested, IBase> >
{
};