継承でスペースを犠牲にして利便性を向上するケースに出会った.
typedef void (*TidyItemProc)(void *item); struct List { /* ... */ void MakeEmpty(TidyItemProc proc); }; struct XList : public List { void MakeEmpty() { List::MakeEmpty(this->tidy_item_proc); } TidyItemProc tidy_item_proc; };
でも実はこれは継承を用いるべきではない.XList is-a List になっていない.これは本当は集約を用いるべきケース.
struct XList { List list; void MakeEmpty() { list.MakeEmpty(this->tidy_item_proc); } TidyItemProc tidy_item_proc; };
しかし集約でメソッドをリダイレクトするのは面倒だ.
0 件のコメント:
コメントを投稿