Здравствуйте, друзья!
Возникла необходимость в такой странной вещи:
Есть некие "объекты", которые однозначно задаются как, скажем, тройка (или четверка, или пара и т.д.) целых КОНСТАНТ, определить их надо в заголовочном файле. Трудность в том, что с этими "объектами" надо работать двумя способами:
— из некоей внешней программы — она читает заголовочный файл и как-то их использует, отсюда и 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
Есть ли более стабильное/правильное решение?