我将一些用C ++编写的代码移植到D.有一次,我介绍了一个包含赋值的便捷宏。喜欢
#define so_convenient(x) value = some_func(x,#x)
所以我正在使用宏
访问实际符号及其字符串
进行作业。
我如何在D中实现这一目标?
答案 0 :(得分:5)
您可以使用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