D中的语句宏

时间:2014-04-09 20:59:48

标签: c++ macros c-preprocessor d

我将一些用C ++编写的代码移植到D.有一次,我介绍了一个包含赋值的便捷宏。喜欢

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

所以我正在使用宏

  1. 访问实际符号及其字符串

  2. 进行作业。

  3. 我如何在D中实现这一目标?

1 个答案:

答案 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