Como substituir as funções virtuais das classes base que têm nomes idênticos em herança múltipla?

Suponha que eu tenha duas classes baseB1 eB2e uma classeD que deriva de B1 e B2 da seguinte maneira:

class B1 {
public:
  // ...
  virtual void foo() final { cout << "Hello, B1\n"; }
};

class B2 {
public:
  // ...
  virtual void foo() { cout << "Good riddance, B2!\n"; }
};

class D :public B1, public B2 {
  // ...
};

Ao projetar a classeD, Quero substituir a função de membro chamadafoo() de B2; Contudo,foo() em B1 está marcadofinal e me impede de substituirfoo() em B2. Qual é a melhor abordagem para substituirfoo() de B2?

questionAnswers(1)

yourAnswerToTheQuestion