基于布尔参数扩展为值或空的宏

问题描述 投票:0回答:1

我正在生成一些编译时代码。我需要根据宏布尔值将后缀附加到生成的函数名称。后缀要么存在,要么为空。如何做到这一点?

#define FUNC_NAME(name, hasSuffix) name ## MAYBE_SHOW_SUFFIX(hasSuffix)

FUNC_NAME(foo, true);  // would generate: foo_
FUNC_NAME(foo, false); // would generate: foo
c++ c
1个回答
0
投票

利用宏展开的结果再次展开的事实:

#define WITHSUFFIX_true(name) name ## _
#define WITHSUFFIX_false(name) name

#define FUNC_NAME(name, hasSuffix) WITHSUFFIX_ ## hasSuffix(name)

FUNC_NAME(foo, true);  // would generate: foo_
FUNC_NAME(foo, false); // would generate: foo

结果

foo_;
foo;

https://godbolt.org/z/EEM938jx9

© www.soinside.com 2019 - 2024. All rights reserved.