Невозможно назначить классы или пространства имен и сделать так, чтобы результат namelookup зависел от этого. Но вы можете назначить адрес переменных. Так что в вашем примере вы могли бы сказать
array<int*, 2> nums;
if(choice == 1)
{
array<int*, 2> blues = {{ &Blue::seven, &Blue::eight }};
nums = blues;
} else if(choice == 2) {
array<int*, 2> reds = {{ &Red::seven, &Red::eight }};
nums = reds;
}
cout << *nums[0] << endl;
cout << *nums[1] << endl;
Однако в этом случае вы можете поместить отпечаток в каждое соответствующее предложение if, что мне кажется более легким
if(choice == 1)
{
cout << Blue::seven << endl;
cout << Blue::eight << endl;
} else if(choice == 2) {
cout << Red::seven << endl;
cout << Red::eight << endl;
}
Если вы осуществляете доступ часто, вы можете поместить цвета в единую структуру данных
typedef std::array<int, NumberCount> number_array;
typedef std::array<number_array, ColorCount> color_array;
color_array colors = {{ {{ 7, 8 }}, {{ 1, 2 }} }};
Таким образом, вы можете использовать индекс, возможно, использовать перечисления для названий цветов вместо необработанных чисел
int arrayIndex = -1;
if(choice == 1)
{
arrayIndex = 0;
} else if(choice == 2) {
arrayIndex = 1;
}
if(arrayIndex != -1) {
cout << colors[arrayIndex][0] << endl;
cout << colors[arrayIndex][1] << endl;
}
Таким образом, вы также можете перебирать цвета (используя функцию size()
массива или его интерфейс итератора). array
является частью TR1, C ++ 0x и Boost.