這聽起來像一個非常奇怪的約束。通過一切手段保護用戶免受不正確使用,但不要試圖禁止的東西,你只是「看不到的地步」。如果有,從你的類派生沒有覆蓋所有的三個功能是沒有意義的,然後讓他喜歡的用戶覆蓋儘可能多或儘可能少的功能,並相信他不會做得出的,無關緊要的事情,而不覆蓋任何的功能。用戶這樣做並沒有什麼壞處,但它不是很有用。
但是,如果你做需要強制執行(再次,我建議你重新考慮),那麼不要使用虛擬功能。而是傳遞函數指針或函數對象(或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