问题描述
尝试简化编写样板,但得到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)