正如我在我的評論說,我覺得橋模式實際上是你想要的,但因爲你是試圖插入用戶的類作爲您NumericField事情,你會做這樣一個基類,是:
template < typename Base = TextField >
struct NumericField : Base
{
...
void paint() { Base::paint(); draw_circle(); }
};
現在,用戶可以使用NumericField<>
或者他們可以插入自己的等級:
struct UserField : TextField
{
...
void paint() { draw_triangle(); }
};
NumericField<UserField> my_field;
橋答案看起來會像這樣:
struct TextField
{
TextField() : extender_(new null_extender) {}
...
void set_extender(extender*);
virtual void paint() { draw_square(); extender_->paint(); }
...
};
struct extender { virtual void paint() = 0; };
struct null_extender { void paint() {}};
struct numeric_extender { void paint() { draw_circle(); }};
struct UserField
{
void paint() { draw_triangle(); extender()->paint(); }
};
很多細節都沒有提到,但那就是故事。
你的問題是不完全清楚,但它幾乎聽起來像你需要在這裏適用的橋模式的一些變種。 – 2011-01-14 05:46:46