0
使用模板實現混合(作爲多重繼承的替代方法)時,存在所有代碼必須位於頭文件中的問題。我正在考慮使用抽象基類來解決這個問題。這裏有一個代碼示例:使用抽象基來實現模板類的私有部分?
class Widget
{
public:
virtual ~Widget() {}
};
// Abstract base class allows to put code in .cpp file.
class AbstractDrawable
{
public:
virtual ~AbstractDrawable() = 0;
virtual void draw();
virtual int getMinimumSize() const;
};
// Drawable mix-in
template<class T>
class Drawable : public T,
public AbstractDrawable
{
public:
virtual ~Drawable() {}
virtual void draw()
{ AbstractDrawable::draw(); }
virtual int getMinimumSize() const
{ return AbstractDrawable::getMinimumSize(); }
};
class Image : public Drawable<Widget>
{
};
int main()
{
Image i;
i.draw();
return 0;
}
有沒有人走過那條路?我應該注意哪些缺陷?