[英]Return pointer to a const array in c++
我必須在頭文件中有2個常量數組
const TPair<char, char> array1[] =
{
{'V', rV},
{'v', rv},
{'H', rH},
{'h', rg},
{0, 0}
};
和array2類似於array1。
現在,我需要一個可以選擇這些數組之一並返回指向適當數組的指針的函數。
該函數的簽名應如何顯示? 我該返回什么:array1或array1&?
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;
}
這有點棘手。 首先,您不想將數組的定義放在標題中。 這將在每個包含標題的轉換單元中生成一個數組實例,其中大多數將永遠不會使用。 而且我會明確使用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
,則可以將實際的數組放在未命名的名稱空間中。
其類型應為:
const TPair<char, char>*
你應該回來
array1
像這樣:
const TPair<char,char>* choose() {
return condition ? array1 : array2;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.