Привет всем! пришла в голову мысль, что неплохо было бы создать такие макросы или шаблоны, чтобы описывать структуру с какими-либо метаданными (числовыми или строковыми константами)
STRUCT(MyPoint, "Точка")
DECLARE(int, x, "Первая координата")
DECLARE(int, y, "Вторая координата")
END_STRUCT()
это должно развертываться в обычное описание структуры и некоторые статические данные,
привязанные к каждому полю структуры. Структура путь наследуется от класса со статическими функциями, в которых реализуется некоторая функциональность — например:
получить текстовое имя переменной по смещению
char *p = MyPoint::GetName( &MyPoint::x );
загрузить из ini-файла или из xml
MyPoint pt;
MyPoint::LoadFromIni(&pt, "data.ini");
и т.д.
Но как это сделать??? Вариант с const static внутри структуры (который можно инициализировать прямо в процессе декларации структуры) проходит только на VS2006, а хочется чтобы работало и на VS6 и на VS7.1.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, x-code, Вы писали:
XC>STRUCT(MyPoint, "Точка")
XC> DECLARE(int, x, "Первая координата")
XC> DECLARE(int, y, "Вторая координата")
XC>END_STRUCT()
нужно разделить объявление и инициализацию: можно задефайнить список желаемых полей и потом в 2 этапа сделать объявления по списку и потом гденибуть наруже структуры сделать инициализацию статиков по тому же списку...
struct MyPoint
{
#define MYPOINT_DATAMEBERS \
((Точка)) \
((int, x, Первая координата)) \
((int, y, Вторая координата))
PP_DECLARE_STRUCT_DATAMEMBERS(MYPOINT_DATAMEMBERS);
};
PP_INITIALIZE_STRUCT_METADATA(MYPOINT_DATAMEMBERS);
както так это вполне себе возжмножо устроить
еще вариант подумать над своим препроцессором
-- a la `moc` из QT