如何解决使用预处理器指令生成成员名称?
我想实现以下目标,但我无法做到:
struct SamplerState
{
int i;
};
#define SAMPLER_TYPE Point
#define SAMPLER_MODE_U Clampu
#define SAMPLER_MODE_V ClampV
#define SAMPLER_NAME( a,b,c ) ( ##a ##_ ##b ##_ ##c)
#define SAMPLER SamplerState SAMPLER_NAME(SAMPLER_TYPE,SAMPLER_MODE_U,SAMPLER_MODE_V)
int main()
{
SAMPLER = {};
}
我希望 SAMPLER
的名称为 Point_Clampu_ClampV
,但在调试时不是,而是 SAMPLER_TYPE_SAMPLER_MODE_U_SAMPLER_MODE_V
:
问题:
如果可能的话,我怎样才能做到这一点?
解决方法
- 您不能在
(
中加入a
和(##a
。不需要。 - 您必须有另一个级别的扩展,另一个宏,才能让
a
、b
和c
扩展。
struct SamplerState
{
int i;
};
#define SAMPLER_TYPE Point
#define SAMPLER_MODE_U ClampU
#define SAMPLER_MODE_V ClampV
#define SAMPLER_NAME_IN(a,b,c) ( a##_ ##b##_##c )
#define SAMPLER_NAME(a,c) SAMPLER_NAME_IN(a,c)
#define SAMPLER SamplerState SAMPLER_NAME(SAMPLER_TYPE,SAMPLER_MODE_U,SAMPLER_MODE_V)
int main()
{
SAMPLER = {};
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。