使用预处理器指令生成成员名称?

Generate a member name using preprocessor directives?

我想实现以下目标,但我做不到:

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

问题:

如果可能的话,我怎样才能做到这一点?

  1. 您无法在 (##a 中与 a 一起加入 (。没必要。
  2. 你必须有另一个扩展级别,另一个宏,才能让 abc 扩展。

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, b, c)  SAMPLER_NAME_IN(a, b, c)
#define SAMPLER SamplerState SAMPLER_NAME(SAMPLER_TYPE, SAMPLER_MODE_U, SAMPLER_MODE_V)

int main()
{
    SAMPLER = {};
}