使用宏定义字段,但字段不能具有类型 'void' and/or 应为 ')'

Define field with macro, but Field cannot have type 'void' and/or Expected ')'

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

新手c++,看到一堆这样的问题,还是想不通。这些错误对我来说仍然太神秘,无法 google 它们..

#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”的代码

谢谢!

##是用来粘贴token的,不过貌似你以为是“反串化”。
它也是一个二元运算符,而不是“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)