我有一个尴尬的问题。我认为这是不可能的,但我需要确定。这有点奇怪,但我需要我的子类共享父类的 SAME Pixels 向量。
基本上,我想创建一个 Image 类的实例。该 Image 类将保存 Bitmap 和 Png 类的像素,因此如果我需要从 Bitmap 转换为 PNG,反之亦然,它们使用相同的矢量,而不是我创建 Bitmap 和 PNG 类。
class Image
{
private:
std::vector<RGB> Pixels;
};
class Bitmap : Image
{
public:
Bitmap() : Image() {};
};
class Png : Image
{
public:
Png() : Image() {};
};
这样当我这样做时:
int main()
{
Image Img();
Img.GetBitmapPixels(); //This
Img.GetPngPixels(); //And this, return the same Pixels Vector.
Bitmap Foo = Img.ToPng();
Png Moo = Img.ToBitmap();
//Such that both Foo and Moo have the exact same underlying Pixels Vector.
}
目前我的课程看起来像:
class Bitmap
{
private:
std::vector<RGB> Pixels;
public:
Bitmap();
std::vector<RGB> GetPixels() {return Pixels;}
void SetPixels(std::vector<RGB> Pixels) {this->Pixels = Pixels;}
};
class Png
{
private:
std::vector<RGB> Pixels;
public:
Png();
std::vector<RGB> GetPixels() {return Pixels;}
void SetPixels(std::vector<RGB> Pixels) {this->Pixels = Pixels;}
};
要从一种转换为另一种,我必须这样做:
int main()
{
Bitmap Bmp();
Png PNG();
PNG.SetPixels(BMP.GetPixels); //BMP has to COPY PNG's Pixels and vice-versa..
}
这是一个愚蠢的问题。我只是不想复制像素。我只想能够在两个类之间进行转换而无需任何复制,因为这两个类都拥有一个 std::vector Pixels 成员并且数据对齐相同。
我想我正在努力做到:PNG.SaveAsBitmap(...); 或 BMP.SaveAsPNG(...); 不创建另一个的新实例。
如何避免复制/创建和创建我要转换到的另一个类的新实例?我可以拥有彼此继承的类吗?