Я портирую некоторый код, написанный на C ++, на D. В какой-то момент я ввел вспомогательный макрос, который содержит присваивание. подобно
#define so_convenient(x) value = some_func(x,#x)
Поэтому я использую макросы для
получить доступ к фактическому символу и его строке и
сделать назначение.
Как мне добиться этого в D?
Вы можете использовать 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
Других решений пока нет …