[問題] 想要把pair的first跟second「換個名字」

看板C_and_CPP作者 (上大學好忙喔)時間14年前 (2010/05/08 17:59), 編輯推噓0(0016)
留言16則, 4人參與, 最新討論串1/2 (看更多)
遇到的問題: (題意請描述清楚) 過去我都會用 typedef pair<int,int> MyType; 來定義我要的pair型態 但是這樣存取還是會遇到 xxx.first 跟 xxx.second 這樣的存取方式 很不好懂 我希望可以用 xxx.height 跟 xxx.weight (我用身高跟體重舉例)來存取它 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) g++ 不過希望正常的compiler都能用XD 有問題的code: (請善用置底文標色功能) 這是我依照想法寫的 struct MyType: public pair<int,int>{ MyType():height(first),weight(second){} MyType(int h, int w):height(first),weight(second){height=h, weight=w;} MyType(pair<int,int> p):height(first),weight(second) {height=p.first,weight=p.second;} int &height, &weight; }; 補充說明: 我的想法是用reference來達成目的, 第一個constructor是基本的給定reference 第二個constructor則是為了跟pair(const T1 &a, const T2 &b)相容 第三個則是希望MyType可以跟pair互換 (因為我用繼承 所以MyType當成pair<int,int>用應該是沒問題才對) 但是寫完以後我發現: 1. height(first),weight(second) 這段初始化我要寫3遍 感覺很蠢 但是我不知道該怎麼樣才能讓他們用同一段程式初始化一個reference 2. 這樣寫起來好囉唆....有沒有辦法可以更簡潔的達成我的目的呢? 麻煩各位指點一下迷津...小弟對C++不太熟 Q_____Q 謝謝了<(_ _)> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.16.250

05/08 18:33, , 1F
如果是reference, 你就只能這樣做囉, 不然可以不要用
05/08 18:33, 1F

05/08 18:34, , 2F
沒必要執著於使用pair吧??
05/08 18:34, 2F

05/08 18:34, , 3F
reference, 直接用inline member function:height()
05/08 18:34, 3F

05/08 18:34, , 4F
那有沒有其他方式可以達成我要的目的呢?就只是換個名字...
05/08 18:34, 4F

05/08 18:35, , 5F
、width() 來把資料成員first、second包裝起來
05/08 18:35, 5F

05/08 18:36, , 6F
看錯原來是重量@@
05/08 18:36, 6F

05/08 18:39, , 7F
loveme00835: 不要緊 是我例子舉得不好XD 這麼做的確解決了1
05/08 18:39, 7F

05/08 18:39, , 8F
那有沒有辦法進一步解決2呢?
05/08 18:39, 8F

05/08 18:41, , 9F
在每個版本的建構式, 都只呼叫父類別的建構式即可
05/08 18:41, 9F

05/08 18:42, , 10F
akasan: 您說的好像也有道理...當初會用pair應該是懶得寫
05/08 18:42, 10F

05/08 18:42, , 11F
多餘的comstructor....結果現在反而更麻煩XD
05/08 18:42, 11F

05/08 18:45, , 12F
像這樣 : MyPair( pair<int,int> p ) : pair<int,int>
05/08 18:45, 12F

05/08 18:45, , 13F
( p ) { /* empty body */ }
05/08 18:45, 13F

05/08 19:02, , 14F
pair 又沒有特異功能. 既然都要重包了, 自己重寫一個不是比
05/08 19:02, 14F

05/08 19:02, , 15F
較自在?
05/08 19:02, 15F

05/09 03:25, , 16F
感謝樓上各位 我好像真的耍了很大的笨XD
05/09 03:25, 16F
文章代碼(AID): #1BvJOQ_y (C_and_CPP)
文章代碼(AID): #1BvJOQ_y (C_and_CPP)