[问题] 在Runtime时决定资料型态

楼主: mjchicken (狐狸)   2015-05-19 14:54:22
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
Delphi XE3 C++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
vcl
问题(Question):
如果想要在runtime时决定资料型态时,除了if/else的写法外
有没有其他类型的写法
喂入的资料(Input):
目前有一组raw的图形资料,储存方式有16bits和8bits两种
如果以case by case的方式处理怕以后不好maintain
目前的想法是用
class ImageData{
public:
ImageData(int);
char* Data; //原始图资
void setDataType(int); //设定资料储存bits数
int getData(int); //读取第n笔资料
private:
int bits;
}
ImageData::ImageData(int size){
Data = new char[size];
}
void ImageData::setDataType(int inputBits){
bits = inputBits;
}
int getData(int pos){
if (bits == 8) return (int) *(Data + pos);
else if (bits == 16) return (int) *((short*)Data + pos);
}
的方式实做,这样会不会也不好maintain或是有其他较佳的方式
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):
补充说明(Supplement):无
作者: TobyH4cker (Toby (我要当好人))   2015-05-19 16:07:00
利用档头判断?
作者: Frozenmouse (*冰之鼠*)   2015-05-19 16:13:00
以后会扩增到几种?有考虑对每一种写子类别特化吗?
楼主: mjchicken (狐狸)   2015-05-19 16:15:00
T大可以再多点给hint吗 XD我想总共应该就 1 2 4 bytes 三种类别,因为是影像处理用,应该不会比4bytes还多了主要是考虑到算法用的时候要针对不同type处理比较麻
作者: azureblaze (AzureBlaze)   2015-05-19 16:21:00
楼主: mjchicken (狐狸)   2015-05-19 16:33:00
感谢A大范例,我附上我刚刚写到的进度我是想以memcpy的方式直接覆写Data并且在影像处理时不用因为多加入一组新的type EX:32bit而在每个地方都加上 (int*)char 之类的动作
作者: littleshan (我要加入剑道社!)   2015-05-19 17:12:00
你在处理每个pixel的时候就会有分1/2/4bytes三种吗?还是说你都用int去处理每个pixel,只有储存才分三种后者的情况下你就直接固定每个pixel是int然后在存盘时转换成1或2 bytes就好
作者: TobyH4cker (Toby (我要当好人))   2015-05-19 18:00:00
抱歉这个我不会
作者: longlongint (华哥尔)   2015-05-19 19:31:00
用openCV (如果可以
作者: Frozenmouse (*冰之鼠*)   2015-05-19 20:55:00
bits 数就那几种的话也可以考虑整理成 enum XD不过如果每张图的bits数从头到尾就是固定的话,我会选择用上面多型的方式写
作者: anyoiuo   2015-05-21 10:46:00
用Template http://ideone.com/dMMrV9更正使用unsigned会合是些 http://ideone.com/J5htXe"合适"XDD

Links booklink

Contact Us: admin [ a t ] ucptt.com