这听起来像一个非常奇怪的约束。通过一切手段保护用户免受不正确使用,但不要试图禁止的东西,你只是“看不到的地步”。如果有,从你的类派生没有覆盖所有的三个功能是没有意义的,然后让他喜欢的用户覆盖尽可能多或尽可能少的功能,并相信他不会做得出的,无关紧要的事情,而不覆盖任何的功能。用户这样做并没有什么坏处,但它不是很有用。
但是,如果你做需要强制执行(再次,我建议你重新考虑),那么不要使用虚拟功能。而是传递函数指针或函数对象(或std::function
/boost::function
)回调函数。让基类是这个样子:
struct simple_http_service
{
typedef std::function<reply (...)> func_type;
reply http_get(...) { return get_func(...); }
reply http_post(...) { return post_func(...); }
reply http_delete(...) { return delete_func(...); }
// etc.
private:
func_type get_func;
func_type post_func;
func_type delete_func;
};
现在只需添加必要的构造函数(或免费/静态功能,所以你可以为它们命名,以避免歧义),这样的类只能当至少一个实例提供函数对象。
我90%肯定没有这样做的一个非常好的方法,尤其是很难表达的约束类似于C++ – 2011-06-04 09:33:11
呃做这些中的一个,似乎是靠不住的设计。如果他们忽略了三种功能中的两种功能,还有什么? – GManNickG 2011-06-04 09:37:09
如果您提供了所有这些功能的良好默认实现,那么如果有人想要派生出一个全部使用它们的类,那么为什么它对您很重要? – 2011-06-04 09:40:06