例如:
#define PropertyBuilderWithValue(CLASS, type, name, value)\
private:\
type m_##name = value;\
public:\
inline CLASS* set##name(type v) {\
m_##name = v;\
return this;\
}\
inline type get##name() const {\
return m_##name;\
}
其含义:
这段代码是C++中使用宏定义(#define
)来创建一个属性构建器的例子。宏定义PropertyBuilderWithValue
接受四个参数:CLASS
(类名),type
(数据类型),name
(变量名),和value
(变量初始值)。
这个宏定义用于生成CLASS的成员变量,以及相应的设置(set
)和获取(get
)方法。生成的代码段中,成员变量m_##name
被设置为私有,并且初始值为value
。##
是宏拼接运算符,它会把name
和m_
拼接起来,形成成员变量的名字。
生成的set##name
方法允许设置成员变量的值,并返回指向当前对象this
的指针,这使得可以链式调用多个set
方法。get##name
方法则返回成员变量的值。
其中inline关键字表示这段代码将“内联展开”,其含义是编译器会在调用该函数的地方直接插入函数体的代码,这样可以减少函数调用的开销,尤其是对于那些只有几行代码的短小函数。
用法举例:
你有 Exp
,并且想要为它创建一个类型为int
,名为age
,初始值为30的属性
,你可以这样使用这个宏:
PropertyBuilderWithValue(Exp, int, age, 30)
其生成的代码为
private:
int m_age = 30;
public:
inline Exp* setage(int v) {
m_age = v;
return this;
}
inline int getage() const {
return m_age;
}
实际运用:
比如你在一个名为Marco.h的文件中定义了这段宏,你创建了新的一个类,可以在头文件中这么写:
#pragma once
#include <Marco.h>
class NewC{
public:
PropertyBuilderWithValue(NewC, int, Id, -1);
public:
NewC();
~NewC();
}