C ++ Macro粘贴:有可能吗?

时间:2014-07-09 16:15:59

标签: c++ macros

使用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;

(使用下划线来证明应该添加到令牌中的内容)

我尝试过使用宏贴图等,但我无法做到。 有可能吗?

1 个答案:

答案 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是参数
  • 您必须通过在换行符前放置\来逃避每一个新行。