Хитрая система #define'ов.
От: Аноним  
Дата: 28.05.10 13:44
Оценка:
Здравствуйте, друзья!

Возникла необходимость в такой странной вещи:
Есть некие "объекты", которые однозначно задаются как, скажем, тройка (или четверка, или пара и т.д.) целых КОНСТАНТ, определить их надо в заголовочном файле. Трудность в том, что с этими "объектами" надо работать двумя способами:

— из некоей внешней программы — она читает заголовочный файл и как-то их использует, отсюда и define'ы;
— в компилируемой программе на C++ "компоненты" этих "объектов" должны быть доступны как константы, которые, скажем, могут использоваться в директиве #if.

Другими словами, нужно что-то вроде этого:

#define THREE(x,y,x) x,y,z

#define FIRST_OF_THREE(x,y,z) x
#define SECOND_OF_THREE(x,y,z) y
#define THIRD_OF_THREE(x,y,z) z

#define FIRST(a) FIRST_OF_THREE(a)
#define SECOND(a) SECOND_OF_THREE(a)
#define THIRD(a) THIRD_OF_THREE(a)



Тогда заголовочный файл определения "объектов" будет примерно таким:

#define MyThree THREE(1,2,3)
#define OtherThree THREE(4,5,6)
#define AnotherThree THREE(7,8,9)


А в компилируемом коде я хочу использовать это примерно так:

int k=SECOND(OtherThree); // k=5


Беда в том, что это не везде работает. Это работает в gcc4.3, но не работает в vc2008

Есть ли более стабильное/правильное решение?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.