Оператор макросов в D

Я портирую некоторый код, написанный на C ++, на D. В какой-то момент я ввел вспомогательный макрос, который содержит присваивание. подобно

#define so_convenient(x) value = some_func(x,#x)

Поэтому я использую макросы для

  1. получить доступ к фактическому символу и его строке и

  2. сделать назначение.

Как мне добиться этого в D?

6

Решение

Вы можете использовать mixin оператор для преобразования строки в код во время компиляции, например:

mixin("value = 123;");

Следующая функция сгенерирует строку, содержащую инструкцию, которая будет ближайшим эквивалентом вашего макроса C:

string soConvenient(alias A)()
{
return std.string.format(
'value = someFunc(%1$s, "%1$s");',
__traits(identifier, A));
}

Который вы бы тогда использовали так:

mixin(soConvenient!x);       // equivalent to 'so_convenient(x) in C
5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector