2012-02-20 63 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,你可以把实际 数组在一个未命名的名称空间中。