sayhello
私は 2 つのポリシーを取るホスト クラスを持っていますtalk
。ポリシーtalk
はクラス テンプレートであり、それ自体がたとえばsayhello
. 問題は、sayhello::saySomething
があいまいであることですhost2
(このダイヤモンドの問題を で解決しようとしましたvirtual
)。
このあいまいさをどのように解決できますか? または、一般に、そのような問題に対するより良い設計はありますか?
例:
#include <iostream>
class sayhello {
protected:
void saySomething(void) {
std::cout<<"Hello!"<<std::endl;
}
};
template<typename T>
class talk : private T {
protected:
void doSomething(void) {
T::saySomething();
}
};
template<typename T>
class host1 : virtual T {
public:
void hostAction(void) {
T::doSomething();
}
};
template<typename T, typename L>
class host2 : private T, private L {
public:
void hostAction(void) {
T::doSomething();
L::saySomething();
}
};
int main() {
host1<talk<sayhello> > HOST1;
HOST1.hostAction(); // ok that works
host2<talk<sayhello>,sayhello> HOST2;
HOST2.hostAction(); // error, ambiguity!
return 0;
}