gpt4 book ai didi

C++:从(不是)类实例获取类型

转载 作者:行者123 更新时间:2023-11-28 06:58:42 25 4
gpt4 key购买 nike

考虑一个抽象类 ImageSource,它表示 RGB 格式的图像数据。不同的颜色深度可能有不同的实现。一种实现可以选择像这样的像素表示

struct Pixel{
uint8_t red;
uint8_t green;
uint8_t blue;
};

或者另一个类似的

struct Pixel{
uint8_t red : 2;
uint8_t green : 2;
uint8_t blue : 2;
uint8_t : 2;
};

我想以一种可以从类定义中获取表示像素数据的结构的方式创建 ImageSource,就像在这个示例中一样:

void debugPixel(ImageSource &source){
//ImageSource is abstract, each implementation may use a different pixel structure
uint8_t *data = source->getBuffer();
for(uint16_t i = 0; i < source->getWidth() * source->getHeight() * sizeof(source::Pixel); i += sizeof(source::Pixel)){
source::Pixel *pixel = data[i];
std::cout << "red: " << pixel->red << ", green: " << pixel->green << ", blue: " << pixel->blue;
}
}

ImageSource 可以这样定义

class ImageSource{
public:
virtual uint8_t* getBuffer() = 0;
virtual uint16_t getHeight() const = 0;
virtual uint16_t getWidth() const = 0;
};

如果我只有一个类的实例(我不知道 ImageSource 实际上是哪种类型),是否有任何方法可以从类中检索类型(Pixel 结构)?

最佳答案

在上面的示例中,您希望根据类型以特定方式打印数据。我相信您还会有其他方法。

将 Pixel 移至一个类(您也可以将其保留为结构,非常接近 C++ 中的类),并为每个不同类型的 Pixel 对象实现一个输出运算符。在 Pixel 中实现您需要的特定于 Pixel 类型的任何其他方法。

然后,您让语言为您确定类型和正确的方法。

关于C++:从(不是)类实例获取类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22819808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com