使用宏定义字段,但字段不能具有“ void”和/或“'''

问题描述

尝试简化编写样板,但得到Field cannot have type 'void'和/或Expected ')'

新手C ++,我已经看到了很多类似的问题,但仍然无法解决。这些错误对我来说仍然太隐秘,无法谷歌搜索它们。

#define GAME_STAT(Stat) \
    UPROPERTY(BlueprintReadOnly,Category = "Stats",ReplicatedUsing = OnRep_##Stat##) \
    FGameplayAttributeData ##Stat##; \
    GAME_STAT_ACCESS(UGameStats,##Stat##); \
    UFUNCTION() \
    virtual void OnRep_##Stat##(const FGameplayAttributeData& Old##Stat##);
    
GAME_STAT("Health")

我想用单词“ Health”而不是备用“ Stat”生成代码

谢谢!

解决方法

##用于将令牌粘贴在一起,但是您似乎认为它是“反向字符串化”。
它也是二进制运算符,而不是“ around-ary”运算符。

也就是说,

#define hello(x) Hello_##x
hello(World)

会产生

Hello_World

这应该有效(但未经测试):

#define GAME_STAT(Stat) \
    UPROPERTY(BlueprintReadOnly,Category = "Stats",ReplicatedUsing = OnRep_##Stat) \
    FGameplayAttributeData Stat; \
    GAME_STAT_ACCESS(UGameStats,Stat); \
    UFUNCTION() \
    virtual void OnRep_##Stat(const FGameplayAttributeData& Old##Stat);
    
GAME_STAT(Health)