使用预处理器指令生成成员名称?
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
:
问题:
如果可能的话,我怎样才能做到这一点?
- 您无法在
(##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, b, c) SAMPLER_NAME_IN(a, b, c)
#define SAMPLER SamplerState SAMPLER_NAME(SAMPLER_TYPE, SAMPLER_MODE_U, SAMPLER_MODE_V)
int main()
{
SAMPLER = {};
}
我想实现以下目标,但我做不到:
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, b, c) SAMPLER_NAME_IN(a, b, c)
#define SAMPLER SamplerState SAMPLER_NAME(SAMPLER_TYPE, SAMPLER_MODE_U, SAMPLER_MODE_V)
int main()
{
SAMPLER = {};
}