2012-02-20 77 views
1

我必須在頭文件2個恆定陣列,說返回指針到一個const陣列中的C++

const TPair<char, char> array1[] = 
{ 
    {'V', rV},  
    {'v', rv}, 
    {'H', rH}, 
    {'h', rg}, 
    {0, 0} 
}; 

和ARRAY2類似於ARRAY1。
現在我需要一個函數來選擇這些數組中的一個,並將指針返回給相應的數組。
該函數的簽名應該如何?我該返回什麼:array1或array1 &?

回答

3

typedef奇妝這種代碼更易讀:

typedef TPair<char, char> pair_of_chars; 

然後,...

const pair_of_chars array1[] = 
{ 
    // [...] 
}; 

您所選擇的功能可能看起來有點像這樣:

const pair_of_chars* choose(int number) 
{ 
    if (number == 1) 
    { 
     return array1; 
    } 
    return array2; 
} 
2

它的類型應該是:

const TPair<char, char>* 

,你應該返回

array1 
2

像這樣:

const TPair<char,char>* choose() { 
    return condition ? array1 : array2; 
} 
3

這有點棘手。首先,您不想將數組的定義 放在標題中。這導致在 中的每個翻譯單元的數組的實例包括頭部,其中大多數將從不使用 。我肯定會使用typedef。 如果你訪問這個數組的唯一途徑就是通過你詢問有關功能的 返回值,那麼您在 頭需要的是對函數的聲明:

typedef TPair <char, char> CharPairArray[3]; 
CharPairArray const& getArray(bool condition); 

(如果沒有的typedef時,函數的聲明是:

TPair <char, char> const (&getArray(bool condition))[3]; 

這是你不想去的路線)

如果您還需要其他方式訪問數組,你需要添加:

extern CharPairArray const array1; 
extern CharPairArray const array2; 

於是,一些源文件(只有一個),你定義的功能和 陣列:

CharPairArray const array1 = { /* ... */ }; 
CharPairArray const array2 = { /* ... */ }; 

CharPairArray const& 
getArray(bool condition) 
{ 
    return condition ? array1 : array2; 
} 

如果你沒有在標題中使用extern,你可以把實際 數組在一個未命名的名稱空間中。