使用QT5 - MinGW:
我喜欢写类似的东西:
_MyProperty (long,PropertyName);
并以这种方式扩展:
long p_PropertyName; // this is the private variable
void PropertyName_Get (const long& newVal) {p_PropertyName = newVal;} // setter function
long PropertyName_Set () {return p_PropertyName;} // getter function
__property <MyClass,long,&MyClass::PropertyName_Get,&MyClass::PropertyName_Set> PropertyName;
(使用下划线来证明应该添加到令牌中的内容)
我尝试过使用宏贴图等,但我无法做到。 有可能吗?
答案 0 :(得分:2)
它应该像这样工作:
#define _MyProperty(TYPE,NAME) TYPE p_##NAME; \
void NAME##_Get (const TYPE& newVal) {p_##NAME = newVal;} \
TYPE NAME##_Set () {return p_##NAME;} \
__property <MyClass,TYPE,&MyClass::NAME##_Get,&MyClass::NAME##_Set> NAME;
最重要的部分:
##
运算符将名称的某些部分粘合在一起。您必须使用它将参数与其他名称片段组合在一起。如果您不使用它而只写p_NAME
,则词法分析器将无法识别NAME
是参数\
来逃避每一个新行。