【发布时间】:2013-01-13 12:15:19
【问题描述】:
试图实现一种设计,其中实现接口的类只能从库中调用。换句话说,对实现的接口的访问应该是通过库(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;
}
【问题讨论】:
-
您的标题是 C,但您的标签和代码是 C++。是哪个?
-
显然是微软 C++。
-
c.hi();不会失败吗?hi()是受保护的成员。 -
真正的问题是:它应该有什么用?现在我看不出它会如何更好或更容易地使用你的库。
-
此代码有效。想知道是否有更好的方法来确保主程序仅通过库与接口实现对话。如果可能的话,任何其他优化也会有所帮助。
标签: c++ design-patterns inheritance delegates class-design