Imageクラス階層の設計提案が必要です。
現在、2種類の画像があります(1つは標準画像で、もう1つは標準画像データが含まれていません)。オブジェクトに画像データ用のメモリを割り当てたい場合もあれば、オブジェクトがそれを指すようにしたい場合もあります。
TypeA画像に特定の機能を与えたいときに問題が発生します。
TypeAイメージがImageから継承する場合、割り当てられたイメージと割り当てられていないイメージの機能を複製する必要があります。
これを行うためのより良い方法があると確信しています。大学時代にミックスインを使用したエレガントなソリューションをいくつか覚えていますが、ここでそれを使用する方法を見つけることができません。
私の現在のデザインは次のようになります。
class Image
{
public:
Image(int width, int height, int bpp);
virtual ~Image() {};
// getters
template <typename T>
T* ptr() { return reinterpret_cast<T*>(m_imageData); } // T depends on bpp
protected:
// metadata
char* m_imageData;
};
class AllocImage : public Image
{
public:
AllocImage(int width, int height, int bpp, DataType dataType) :
Image(width, height, bpp, dataType)
{
m_imageData = new char[m_dataSize];
}
~AllocImage()
{
delete m_imageData;
}
};
class ImageHolder : public Image
{
public:
ImageHolder(int width, int height, int bpp, DataType m_dataType);
void setPtr(const void* ptr);
};
class AllocatedImageTypeA : public AllocImage
{
public:
// Type A specific methods
};
class NonAllocatedImageTypeA : public ImageHolder
{
public:
// duplicated Type A specific methods
};