結局、多重継承のあいまいさを解消する手段として
どれが一般的&エレガント?

class Base1 { void foo() {...} };
class Base2 { void foo() {...} };

class Hoge : public Base1, public Base2{
public:
 void bar(){Base1::foo();} //bar()の名はfoo()でいい
 using Base1::foo;
};
int main(){
 Hoge hoge;
 hoge.bar();  //1
 hoge.Base1::foo();  //2
 hoge.foo();  //3
 return 0;
}