作者loveme00835 (高髮箍)
看板C_and_CPP
標題Re: [問題] 一維陣列轉三維陣列 (影像檔)
時間Mon Sep 26 03:30:38 2011
※ 引述《MiguelC (MC)》之銘言:
可以使用串接式的語法:
struct Printer
{
template<
class T>
Printer& print( T
const &obj )
{
cout << obj << endl;
return *this;
}
};
仔細看黃底的地方, 這手法的主要精神為
「自己就是proxy」, 所
以可以使用下面代碼印出數行到標準輸出流:
Printer().print("hello").print("world").print(2011);
若改而重載 operator[], 程式碼會簡潔許多:
Printer()["hello"]["world"][2011];
以一共計
1 *
2 *
3 chars的圖片來說:
Picture p(
1,
2 );
p[ i ];
物件 p 必須記錄總共跳轉了多少位移, 對上面的程式碼而言, 第
一次呼叫的位移即 i *
2 *
3, 當呼叫情境變成這樣:
p[ i ][ j ];
總位移(第一次+第二次)為: (i *
2 *
3) + (j *
3).
這張圖就變得跟有限狀態機一樣會有轉換的行為, 你只需要確保
使用時都是三個中括號串在一起即可. 接下來還有對每個channel
所做的操作:
p[ 0 ][ 1 ][ 2 ] = 255;
// 賦值
cout << p[ 0 ][ 1 ][ 2 ] << endl;
// 取值
這意味著還需要重載其他兩個運算子:
operator=()
// assignment operator
operator char()
// conversion operator
以下是一個簡單的實作(in C++11):
http://codepad.org/Gkb2yovQ
我自己要用的話會把他限制在兩層呼叫, 最後再存取資料成員:
p[ 0 ][ 0 ].red = 255;
cout << p[ 1 ][ 1 ].green << endl;
這個做起來也不難.
--
★ ★ ★ ★
★ ★ ★ ███ ███ █ █▌█ ██◣ ███ ▋▋█ ★ ★ ★
█▂█ █▃█ █ ███ █▆█ █▄█ ███
★ ★ █ ◣ █ █ █ ▋██ █▆◤ ███ ███ ★ ★
Kim Jae Kyung Koh Woo Ri Cho Hyun Young Kim Ji Sook
φwindyhorse
No Eul Oh Seung A Jung Yoon Hye
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
※ 編輯: loveme00835 來自: 140.121.197.115 (09/26 03:49)
→ MiguelC:一早起來就看到兩個方法 不知道我會消化多久 感謝^^ 09/26 12:58
推 MiguelC:補推一個 09/26 13:04