[問題] 在Runtime時決定資料型態

看板C_and_CPP作者 (狐狸)時間10年前發表 (2015/05/19 06:54), 10年前編輯推噓5(5018)
留言23則, 7人參與, 最新討論串1/1
開發平台(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):無 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.165.161.221 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1432018465.A.B99.html

05/19 16:07, , 1F
利用檔頭判斷?
05/19 16:07, 1F

05/19 16:13, , 2F
以後會擴增到幾種?有考慮對每一種寫子類別特化嗎?
05/19 16:13, 2F

05/19 16:15, , 3F
T大可以再多點給hint嗎 XD
05/19 16:15, 3F

05/19 16:16, , 4F
我想總共應該就 1 2 4 bytes 三種類別,因為是影像處理
05/19 16:16, 4F

05/19 16:17, , 5F
用,應該不會比4bytes還多了
05/19 16:17, 5F

05/19 16:19, , 6F
主要是考慮到演算法用的時候要針對不同type處理比較麻
05/19 16:19, 6F

05/19 16:21, , 7F
05/19 16:21, 7F
※ 編輯: mjchicken (1.165.161.221), 05/19/2015 16:28:37

05/19 16:33, , 8F
感謝A大範例,我附上我剛剛寫到的進度
05/19 16:33, 8F

05/19 16:35, , 9F
我是想以memcpy的方式直接覆寫Data
05/19 16:35, 9F

05/19 16:36, , 10F
並且在影像處理時不用因為多加入一組新的type EX:32bit
05/19 16:36, 10F

05/19 16:37, , 11F
而在每個地方都加上 (int*)char 之類的動作
05/19 16:37, 11F

05/19 17:12, , 12F
你在處理每個pixel的時候就會有分1/2/4bytes三種嗎?
05/19 17:12, 12F

05/19 17:13, , 13F
還是說你都用int去處理每個pixel,只有儲存才分三種
05/19 17:13, 13F

05/19 17:13, , 14F
後者的情況下你就直接固定每個pixel是int
05/19 17:13, 14F

05/19 17:14, , 15F
然後在存檔時轉換成1或2 bytes就好
05/19 17:14, 15F

05/19 18:00, , 16F
抱歉這個我不會
05/19 18:00, 16F

05/19 19:31, , 17F
用openCV (如果可以
05/19 19:31, 17F

05/19 20:55, , 18F
bits 數就那幾種的話也可以考慮整理成 enum XD
05/19 20:55, 18F

05/19 20:58, , 19F
不過如果每張圖的bits數從頭到尾就是固定的話,我會
05/19 20:58, 19F

05/19 20:58, , 20F
選擇用上面多型的方式寫
05/19 20:58, 20F

05/21 10:46, , 21F
05/21 10:46, 21F

05/21 10:56, , 22F
更正使用unsigned會合是些 http://ideone.com/J5htXe
05/21 10:56, 22F

05/21 10:57, , 23F
"合適"XDD
05/21 10:57, 23F
文章代碼(AID): #1LMjuXkP (C_and_CPP)