Set&Get and MACRO

本文探讨了在C++编程中使用Get和Set方法的优势,尤其是在提高调试效率和代码可维护性方面的作用。通过对比struct直接访问成员变量的方式,阐述了Get和Set方法在控制数据访问、简化调试流程及提高代码质量上的好处。

Set&Get 配合private是c++ class里面常用的。

这样很大程度上可以对数据的存取进行控制。

最近接触了大量的struct,然后直接存取其中变量的代码,在debug 跟踪的时候颇感不便。

Set&Get直接在函数里面设断点就可以了, 而直接存取数据实在是麻烦,很多时候要借助硬件断点来找,debug效率差很多。

另外一点对于直接存取来说,就是名字的查找在项目里面也很麻烦, 像StaticMesh这样的名字很多类都会有,查找的效率也差很多。

MACRO,我开始颇为反感这个东西,是的,它可以让代码变得更加简洁,但是这个需要我们非常熟悉代码才行,对于刚开始接触的人来说非常麻烦。当然这个麻烦克服起来也比较容易。

但是MARCO带来的很难设断点跟踪真的是让人不爽。很大程度上降低了编码调试效率。

所以我个人非常倾向于使用Get&Set 慎重使用MARCO

C _Socket网络#pragma once //// namespace #define PHYS_NAMESPACE_BEGIN namespace physeng { #define PHYS_NAMESPACE_END } #define USE_PHYS_NAMESPACE using namespace physeng; //// alignment #define ATTRIBUTE_ALIGNED16(a) a alignas(16) #define ATTRIBUTE_ALIGNED64(a) a alignas(64) #define ATTRIBUTE_ALIGNED128(a) a alignas(128) //// filename macro #ifdef __APPLE__ #define __FILENAME__ (strrchr(__FILE__, '/') + 1) #else #define __FILENAME__ (strrchr(__FILE__, '\\') + 1) #endif //// inline #ifdef _WIN32 #define FORCE_INLINE __forceinline #else #define FORCE_INLINE __attribute__ ((always_inline)) inline #endif //// setter & getter #define DEFINE_MEMBER_SET_GET(T, name, Name)\ protected:\ T name;\ public:\ void set##Name(const T& t){ name = t; }\ const T& get##Name() const { return name; } #define DEFINE_MEMBER_PTR_SET_GET(T, name, Name)\ protected:\ T* name;\ public:\ void set##Name(T* t){ delete name; name = t; }\ T* get##Name() const { return name; } #define DEFINE_OBJARRAY_SET_GET(T, name, Name)\ protected:\ ObjectArray<T> name;\ public:\ void set##Name(ObjectArray<T>& arr){ name = std::move(arr); }\ ObjectArray<T>& get##Name(){ return name; }\ //// setter & getter of arrays #define DEFINE_ARRAY_MEMBER_SET_GET(T, cnt, name, Name)\ protected:\ T name[cnt];\ public:\ void set##Name(int idx, const T& t){ name[idx] = t; }\ const T& get##Name(int idx) const { return name[idx]; } #define DEFINE_DYNAMIC_ARRAY_MEMBER_SET_GET(T, name, Name)\ protected:\ ObjectArray<T> name;\ public:\ void set##Name(int idx, const T& t){ name[idx] = t; }\ const T& get##Name(int idx) const { return name[idx]; } #define DEFINE_MEMBER_GET(T, name, Name)\ protected:\ T name;\ public:\ const T& get##Name() const { return name; } #define DEFINE_MEMBER_PTR_GET(T, name, Name)\ protected:\ T* name;\ public:\ T* get##Name() const { return name; } //// assert #include <assert.h> #define ASSERT assert #define CUSTOM_ASSERT(cond, str)\ if(cond){\ std::cout << "\033[35m[" << __TIME__ << "][" << __FILENAME__ << ":" << __LINE__ << "][Assert]\033[0m " << str << std::endl;\ exit(-1);\ } #define UNIMPL_ASSERT()\ CUSTOM_ASSERT(true, "unimplemented") #if defined(DEBUG) || defined (_DEBUG) #define DEBUG_ASSERT assert #else #define DEBUG_ASSERT void // suppress compiler unused-value warning #endif编程大全
最新发布
03-28
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值