D中的语句宏

ste*_*fen 6 c++ macros d c-preprocessor

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

#define so_convenient(x) value = some_func(x,#x)
Run Code Online (Sandbox Code Playgroud)

所以我正在使用宏

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

  2. 做作业.

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

bee*_*boy 5

您可以使用mixin语句在编译时将字符串转换为代码,例如:

mixin("value = 123;");
Run Code Online (Sandbox Code Playgroud)

以下函数将生成一个包含一个语句的字符串,该语句最接近您的C宏:

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

然后你将使用这样:

mixin(soConvenient!x);       // equivalent to 'so_convenient(x) in C
Run Code Online (Sandbox Code Playgroud)