作者CrBoy (上大學好忙喔)
看板C_and_CPP
標題[問題] 想要把pair的first跟second「換個名字」
時間Sat May 8 17:59:52 2010
遇到的問題: (題意請描述清楚)
過去我都會用 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
→ loveme00835:如果是reference, 你就只能這樣做囉, 不然可以不要用 05/08 18:33
→ akasan:沒必要執著於使用pair吧?? 05/08 18:34
→ loveme00835:reference, 直接用inline member function:height() 05/08 18:34
→ CrBoy:那有沒有其他方式可以達成我要的目的呢?就只是換個名字... 05/08 18:34
→ loveme00835:、width() 來把資料成員first、second包裝起來 05/08 18:35
→ loveme00835:看錯原來是重量@@ 05/08 18:36
→ CrBoy:loveme00835: 不要緊 是我例子舉得不好XD 這麼做的確解決了1 05/08 18:39
→ CrBoy:那有沒有辦法進一步解決2呢? 05/08 18:39
→ loveme00835:在每個版本的建構式, 都只呼叫父類別的建構式即可 05/08 18:41
→ CrBoy:akasan: 您說的好像也有道理...當初會用pair應該是懶得寫 05/08 18:42
→ CrBoy:多餘的comstructor....結果現在反而更麻煩XD 05/08 18:42
→ loveme00835:像這樣 : MyPair( pair<int,int> p ) : pair<int,int> 05/08 18:45
→ loveme00835:( p ) { /* empty body */ } 05/08 18:45
→ firose:pair 又沒有特異功能. 既然都要重包了, 自己重寫一個不是比 05/08 19:02
→ firose:較自在? 05/08 19:02
→ CrBoy:感謝樓上各位 我好像真的耍了很大的笨XD 05/09 03:25