正如我在我的评论说,我觉得桥模式实际上是你想要的,但因为你是试图插入用户的类作为您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