У меня проблема с инициализацией вектора целых чисел с именем id_vector
который не нужно изменять.
инициализатор выполняется следующим образом:
static int id[4]{200,300,400,500};
id_vector = std::vector<int> (id,id + (sizeof(id)/sizeof(int)));
Все идет нормально. но теперь нам нужно иметь разные версии этого программного обеспечения, и я хотел бы выбрать другой массив id в зависимости от версии. Единственный способ, который я могу придумать, - сделать это внутри #ifdef
или какого-то макроса, но мне было интересно, знает ли кто-нибудь лучший способ сделать это. Я думал что-то вроде пространства имен, но я не знаю, хорошо ли это для него.
ОБНОВИТЬ
Если бы опечатка в коде, извините. Извините, если я не сделал себя ясным, но в основном это список допустимых идентификаторов, и есть две версии, которые нуждаются в разных действительных идентификаторах. Не думайте, что нужно добавить больше кода.
Пространства имен?
namespace PLATFORM_A
{
static int id[4]{200,300,400,500};
}
namespace PLATFORM_B
{
static int id[4]{500,400,300,200};
}
using namespace USE_PLATFORM;
...
id_vector = std::vector<int> (id,id + (sizeof(id)/sizeof(int)));
С помощью g++ -DUSE_PLATFORM=PLATFORM_A...
или g++ -DUSE_PLATFORM=PLATFORM_B...
или однако вы USE_PLATFORM
....
Если вам нужно поместить разные значения для разных платформ, и вам нужно, чтобы изменения произошли в коде (в отличие от, скажем, файла конфигурации), вы получите #ifdef
в своем коде. Вот один пример того, как вы можете это сделать:
static int id[4]{
#ifdef PLEFTORM_1
200,300,400,500
#endif
#ifdef PLEFTORM_2
100,200,410,522
#endif
};
id_vector = std::vector<int> (id,id + (sizeof(id)/sizeof(*id)));
Другое решение может состоять в том, чтобы поместить все зависящие от платформы материалы в отдельные файлы и условно включить этот файл. Это может уменьшить число #ifdef
до 1, но общий код может оказаться более трудным для чтения.
Конечно, вы можете изменить свою стратегию и поместить идентификаторы платформы в файл конфигурации. Это поможет вам избежать условной компиляции за счет введения зависимости от времени выполнения файла конфигурации.
std::vector<int> id_vector (id,id + (sizeof(id)/sizeof(int)));
id_vector = std::vector<int> (id, id + (sizeof(id)/sizeof(*id)));