[問題] 在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