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)
所以我正在使用宏
访问实际的符号及其字符串和
做作业.
我如何在D中实现这一目标?
您可以使用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)