デザインパターンのブリッジパターンやストラテジパターンのようなケースで
インターフェースクラスを継承して実装クラスを作る場合、
class If() /* interface */
{
public:
If() {}
virtual ~If*( {}
virtual void func() {}
};

class Impl() : public If
{
public:
Impl() {}
~Impl() {}
void func() {}
};

のようにすると思いますが、Implクラスをさらに基底クラス(ImplBase)と2種類の派生クラス(ImplA, ImplB)に分けたい場合、
多重継承以外でやるには、どうするのが良いでしょうか?
まず If を ImplBase に継承させて、次に ImplBase を ImplA と ImplB に継承させる事になるでしょうか?
その場合、純粋仮想関数func()はどのように書くべきでしょうか? ImplBase も virtual void func()としておいて
ImplA で実装するのでしょうか?