инициализировать определенные элементы массива с помощью макросов - PullRequest
0 голосов
/ 25 октября 2018

У меня есть файл данных, который я хочу загрузить во время предварительной обработки.

DATAFILE :
CAR(C1, C2, C3)

Может быть n машин (C1, C2 .... Cn), в настоящее время 3. Поля C1, .. являются перечислениями с определенным значением, скажем, C1 = 5, C2-8,c3-10.

Я хочу заполнить эти данные в массиве машин CAR_SUPPORTED[MAX_CARS] таким образом, чтобы

CAR_SUPPORTED[C1] = 1 and similarly for C2,C3.. so on.

Я пробовал макрос с переменными числами как:

int CAR_SUPPORTED[] ={
#define  CAR(...) __VA_ARGS__};
#include "car.data"

Ноэто может просто скопировать 5, 8, 10 в 0,1,2 индексов.

как бы я написал макрос так, чтобы CAR_SUPPORTED [C1] = 1 и так далее.Есть предложения?

1 Ответ

0 голосов
/ 25 октября 2018

Просто используйте инициализацию массива с указателем:

#define CAR(C1, C2, C3) [C1] = 1, [C2] = 1, [C3] = 1 };

Если вы хотите использовать это для переменного числа аргументов, я бы использовал P99 или увеличил макросы препроцессора, или вы можетенапишите макрос расширения самостоятельно.Захватите пример, используя повышение:

#include <boost/preprocessor.hpp>

#define CAR_ONE(r, data, elem)     [elem] = 1,
#define CAR(...) BOOST_PP_SEQ_FOR_EACH(CAR_ONE,,BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)) };

CAR(A1, A2, A3)
...