インターフェイスを実装するクラスがライブラリからのみ呼び出せるようにする設計を実現しようとしています。つまり、実装されたインターフェイスへのアクセスは、ライブラリ(TopLib)を介して行う必要があります。デリゲートを使用する必要がある場合のようです。デザインについてどう思いますか?これは機能しますが、より良く、堅牢で、ばかげた証拠にするためのフィードバックと提案をいただければ幸いです。
class Interface
{
protected:
virtual void hi(void) = 0;
};
class ABC : private Interface {
protected:
ABC() {}
virtual void hi() {
std::cout << "abc" << std::endl;
}
};
class XYZ : private Interface {
protected:
XYZ() {}
virtual void hi() {
std::cout << "xyz" << std::endl;
}
};
template<typename T>
class TopLib : private T
{
public:
void sayhi() {
hi();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
TopLib<ABC> b;
b.sayhi();
TopLib<XYZ> c;
c.sayhi();
//c.hi(); <- fails
//ABC test; <- fails
//test.hi(); <- fails
getchar();
return 0;
}