我个人实现的C++之get和set方法,使用宏定义

简介: 我个人实现的C++之get和set方法,使用宏定义

本人在C++项目中经常需要用到get和set方法,但是c++并不像 java的eclipse有自动生成 get 和 set 方法。如果手写是可以,但是当属性特别多的时候会非常麻烦。。。于是决定使用宏定义方法来解决。


本人在参考了网上资料(参见文章末尾的参考文献)之后,实现了自己的版本,cplusplusgetset.h头文件如下:

#pragma once
//PropertyBuilderByTypeName 用于生成类的成员变量
//并生成set和get方法
//variable_type为变量类型,可以是指针类型,也可以是非指针类型,例如int,int*等
//type_shortname为变量类型的缩写,例如bool缩写为b,int缩写为i,double缩写为d等
//method_name为方法名称
//access_permission为变量的访问权限(public, protected, private)
#define PropertyBuilder_ReadWrite(variable_type, type_shortname, method_name, access_permission)\
access_permission:\
    variable_type m_##type_shortname##method_name;\
public:\
    inline variable_type get##method_name(void)\
    {\
        return m_##type_shortname##method_name;\
    }\
    inline void set##method_name(variable_type v)\
    {\
        m_##type_shortname##method_name = v;\
    }\
#define PropertyBuilder_ReadOnly(variable_type, type_shortname, method_name, access_permission)\
access_permission:\
    variable_type m_##type_shortname##method_name;\
public:\
    inline variable_type get##method_name(void) const\
    {\
        return m_##type_shortname##method_name;\
    }\
#define PropertyBuilder_WriteOnly(variable_type, type_shortname, method_name, access_permission)\
access_permission:\
    variable_type m_##type_shortname##method_name;\
public:\
    inline void set##method_name(variable_type v)\
    {\
        m_##type_shortname##method_name = v;\
    }\


使用说明:

class MyClass
  {
  public:
  MyClass()
  {
    m_bLookAhead = true;
    m_dStatus = NULL;
    m_iHello = 0;
  }
  ~MyClass() {}
  PropertyBuilder_ReadWrite(bool, b, LookAhead, protected)//bool m_bLookAhead;
  PropertyBuilder_ReadWrite(double*, d, Status, protected)//bool* m_pStatus;
  PropertyBuilder_WriteOnly(int, i, Hello, private)//int m_iHello;
  public:
  void test()
  {
    setLookAhead(true);
    double a = 0;
    setStatus(&a);
    setHello(5);
    bool r = getLookAhead();
  }
  };




---


参考文献


https://blog.csdn.net/Scythe666/article/details/48846761


https://www.codeproject.com/Articles/118921/C-Properties%20Introduction


相关文章
|
3月前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
884 2
|
4月前
|
存储 缓存 监控
用 C++ 红黑树给公司电脑监控软件的日志快速排序的方法
本文介绍基于C++红黑树算法实现公司监控电脑软件的日志高效管理,利用其自平衡特性提升日志排序、检索与动态更新效率,并结合实际场景提出优化方向,增强系统性能与稳定性。
161 4
|
7月前
|
存储 JavaScript 前端开发
Set中的add()方法和数组的push()方法有什么区别?
Set中的add()方法和数组的push()方法有什么区别?
443 122
|
7月前
|
存储 安全 JavaScript
如何使用Set的delete()方法删除元素?
如何使用Set的delete()方法删除元素?
608 122
|
10月前
|
编译器 C++ 容器
【c++丨STL】基于红黑树模拟实现set和map(附源码)
本文基于红黑树的实现,模拟了STL中的`set`和`map`容器。通过封装同一棵红黑树并进行适配修改,实现了两种容器的功能。主要步骤包括:1) 修改红黑树节点结构以支持不同数据类型;2) 使用仿函数适配键值比较逻辑;3) 实现双向迭代器支持遍历操作;4) 封装`insert`、`find`等接口,并为`map`实现`operator[]`。最终,通过测试代码验证了功能的正确性。此实现减少了代码冗余,展示了模板与仿函数的强大灵活性。
294 2
|
7月前
|
存储 安全 JavaScript
如何使用Set的add()方法添加元素?
如何使用Set的add()方法添加元素?
672 58
|
6月前
|
JavaScript 前端开发
如何使用Set的delete()方法删除Set中的所有元素?
如何使用Set的delete()方法删除Set中的所有元素?
378 1
|
8月前
|
存储 缓存 NoSQL
Redis中的常用命令-get&set&keys&exists&expire&ttl&type的详细解析
总的来说,这些Redis命令提供了处理存储在内存中的键值对的便捷方式。通过理解和运用它们,你可以更有效地在Redis中操作数据,使其更好地服务于你的应用。
518 17
|
10月前
|
存储 算法 C++
【c++丨STL】set/multiset的使用
本文深入解析了STL中的`set`和`multiset`容器,二者均为关联式容器,底层基于红黑树实现。`set`支持唯一性元素存储并自动排序,适用于高效查找场景;`multiset`允许重复元素。两者均具备O(logN)的插入、删除与查找复杂度。文章详细介绍了构造函数、迭代器、容量接口、增删操作(如`insert`、`erase`)、查找统计(如`find`、`count`)及`multiset`特有的区间操作(如`lower_bound`、`upper_bound`、`equal_range`)。最后预告了`map`容器的学习,其作为键值对存储的关联式容器,同样基于红黑树,具有高效操作特性。
463 3
|
Java Maven Spring
【SpringBug】lombok插件失效,但是没有报错信息,@Data不能生成get和set方法
解决写了@Data注解,但是在测试文件中生成的反编译target文件Us二Info中没有get和set方法
1120 16