Cpp宏技巧:使用宏自动生成类成员方法等

例如:

#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##是宏拼接运算符,它会把namem_拼接起来,形成成员变量的名字。

生成的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();
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值