#include <iostream>
#include <vector>
using namespace std;
typedef float PixelValue;
class IImageData{
public:
virtual PixelValue getData(int index) = 0;
};
class ImageData8 : public IImageData{
vector<unsigned char> buffer_;
public:
ImageData8():
buffer_(10,128)
{}
virtual PixelValue getData(int index){
return (float)buffer_[index] / 256.0f;
}
};
class ImageData16 : public IImageData{
vector<unsigned short> buffer_;
public:
ImageData16():
buffer_(10,65535)
{}
virtual PixelValue getData(int index){
return (float)buffer_[index] / 65535.0f;
}
};
int main() {
// your code goes here
ImageData8 i8;
ImageData16 i16;
vector<IImageData*> images;
images.resize(2);
images[0] = &i8;
images[1] = &i16;
for(auto img : images){
cout << img->getData(0) <<endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBmbG9hdCBQaXhlbFZhbHVlOwoKY2xhc3MgSUltYWdlRGF0YXsKcHVibGljOgoJdmlydHVhbCBQaXhlbFZhbHVlIGdldERhdGEoaW50IGluZGV4KSA9IDA7Cn07CgpjbGFzcyBJbWFnZURhdGE4IDogcHVibGljIElJbWFnZURhdGF7Cgl2ZWN0b3I8dW5zaWduZWQgY2hhcj4gYnVmZmVyXzsKcHVibGljOgoJSW1hZ2VEYXRhOCgpOgoJCWJ1ZmZlcl8oMTAsMTI4KQoJe30KCXZpcnR1YWwgUGl4ZWxWYWx1ZSBnZXREYXRhKGludCBpbmRleCl7CgkJcmV0dXJuIChmbG9hdClidWZmZXJfW2luZGV4XSAvIDI1Ni4wZjsKCX0KfTsKCmNsYXNzIEltYWdlRGF0YTE2IDogcHVibGljIElJbWFnZURhdGF7Cgl2ZWN0b3I8dW5zaWduZWQgc2hvcnQ+IGJ1ZmZlcl87CnB1YmxpYzoKCUltYWdlRGF0YTE2KCk6CgkJYnVmZmVyXygxMCw2NTUzNSkKCXt9CgoJdmlydHVhbCBQaXhlbFZhbHVlIGdldERhdGEoaW50IGluZGV4KXsKCQlyZXR1cm4gKGZsb2F0KWJ1ZmZlcl9baW5kZXhdIC8gNjU1MzUuMGY7Cgl9Cn07CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCUltYWdlRGF0YTggaTg7CglJbWFnZURhdGExNiBpMTY7Cgl2ZWN0b3I8SUltYWdlRGF0YSo+IGltYWdlczsKCWltYWdlcy5yZXNpemUoMik7CglpbWFnZXNbMF0gPSAmaTg7CglpbWFnZXNbMV0gPSAmaTE2OwoJCglmb3IoYXV0byBpbWcgOiBpbWFnZXMpewoJCWNvdXQgPDwgaW1nLT5nZXREYXRhKDApIDw8ZW5kbDsKCX0KCXJldHVybiAwOwp9