継承でスペースを犠牲にして利便性を向上するケースに出会った.
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 件のコメント:
コメントを投稿