The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Вышел компилятор языка D 2.076"
Отправлено dq0s4y71, 04-Сен-17 18:28 
Это, конечно, всё правильно, но есть ли в этом вашем Д адекватные средства метапрограммирования, способные заменить макросы? Например, в Си можно создать мета-структуру данных, типа:

VAR_START()
    DEF_VAR(date, DATE, "дата", 0)
    DEF_VAR(time, TIME, "время", 0)
    DEF_VAR_RNG(loco_type, USHORT, "Тип локо.", 0, 0, 9999)
    DEF_VAR_RNG(loco_num, USHORT, "№ локо.", 0, 0, 9999)
    DEF_VAR_RNG(loco_driver, ULONG, "таб. номер", 0, 0, 99999999)
    DEF_VAR(last_error_str, CSTR, "Посл.сбой", 0)
    DEF_VAR(input_bits, BYTE, "дв.входы", 0)
    DEF_VAR_RNG(dgu_num_cogs, USHORT, "зубья маховика ДГУ", 0, 1, 999)
    DEF_VAR(dgu_freq, ULONG, "частота ДГУ", 0)
    DEF_VAR(speed, SPEED, "Скорость", 0)
    DEF_VAR(volume, VOLUME, "Объём", 0)
    DEF_VAR(mass, MASS, "Масса", 0)
    DEF_VAR(temper, TEMPER, "Темпер.", 0)
    DEF_VAR(density, DENSITY, "Плотн.", 0)
//...
VAR_END()

и потом, переопределяя макросы VAR_START, DEF_VAR, ... и делая #include, создавать из неё новые типы/структуры/функции/что угодно. Казалось бы, для этого существуют С++ и шаблоны, но шаблоны ВНЕЗАПНО иногда не умеют простейших вещей, которые умеют макросы. Я, например, могу сделать:

#define VAR_START()    enum MY_VAR
#define    DEF_VAR(name, type, strid, init) var_##name
//...

и легко получить из этой мета-структуры:

enum MY_VAR {
    var_date,
    var_time,
    var_loco_type,
    var_loco_num,
//...
};

Как бы я такое сделал на шаблонах? Так что, макросы все ругают, но от них даже в С++ так и не избавились. Такшта...

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру