大纲链接:
Star_Tool:一个C++跨Windows和Linux的工具库_菜鸟小田的博客-CSDN博客
之前有了一篇旧的博客,直接贴过来了,是我一开始写这个getter_setter的时候写的,现在添加一些使用方法文档。当前的工具是基于代理模式设计的依赖注入与获取器
贴出star::getter_setter 公共调用接口,逐一说明公共接口功能:
getter_setter();
getter_setter(DATA_TYPE data);
template<typename...Args>
getter_setter(Args...args);
getter_setter(DATA_TYPE data, std::function<DATA_TYPE(DATA_TYPE)> getter, std::function<DATA_TYPE(DATA_TYPE)> setter);
getter_setter(std::function<DATA_TYPE(DATA_TYPE)> getter, std::function<DATA_TYPE(DATA_TYPE)> setter);
getter_setter(const getter_setter<DATA_TYPE>& CopySource);
getter_setter(getter_setter<DATA_TYPE>&& MoveSource);
~getter_setter();
getter_setter<DATA_TYPE>& change_setter(std::function<DATA_TYPE(DATA_TYPE)> setter); //修改setter,流式依赖注入器
getter_setter<DATA_TYPE>& change_getter(std::function<DATA_TYPE(DATA_TYPE)> getter); //修改getter,流式依赖注入器
getter_setter& operator =(DATA_TYPE data);
operator DATA_TYPE();
DATA_TYPE move();
DATA_TYPE copy();
DATA_TYPE& ref(); //!!危险方法,在修改引用时会略过setter过滤器,这应仅仅用于调用DATA_TYPE的函数。
using type = DATA_TYPE;
getter_setter()
默认构造函数,会将依赖注入器与依赖获取器直接调用默认的依赖注入,并且将数据根据默认构造函数{}进行基本构造。(所以DATA_TYPE必须拥有默认构造函数)
getter_setter(DATA_TYPE data);
带有数据拷贝的构造函数,会调用数据的拷贝构造函数(所以DATA_TYPE必须拥有拷贝或等效函数才能调用该函数),与第一个默认构造函数只有这点不同,相同的是其依赖注入器与依赖获取器直接调用默认的依赖注入函数。
template<typename...Args>
getter_setter(Args...args);
模板多参数的初始化构造函数,会将参数args直接根据顺序调用数据DATA_TYPE的构造函数完成数据的初始化操作。与第一个默认构造函数只有这点不同,相同的是其依赖注入器与依赖获取器直接调用默认的依赖注入函数。
getter_setter(DATA_TYPE data,
std::function<DATA_TYPE(DATA_TYPE)> getter,
std::function<DATA_TYPE(DATA_TYPE)> setter);
构造函数,可以自定义依赖设置器和依赖获取器,完成对依赖数据获取和设置的过滤操作。其data是用于调用DATA_TYPE的拷贝函数(所以DATA_TYPE必须拥有拷贝或等效函数才能调用该函数)。
getter_setter(std::function<DATA_TYPE(DATA_TYPE)> getter, std::function<DATA_TYPE(DATA_TYPE)> setter);
构造函数,只能自定义依赖设置器和依赖获取器,完成对依赖数据获取和设置的过滤操作。其内部数据会调用默认构造函数(所以DATA_TYPE必须拥有默认构造函数)。
getter_setter(const getter_setter<DATA_TYPE>& CopySource);
拷贝构造函数,会拷贝依赖获取器和依赖注入器以及数据本身(所以DATA_TYPE必须拥有拷贝或等效函数才能调用该函数)。
getter_setter(getter_setter<DATA_TYPE>&& MoveSource);
暂时与拷贝构造函数效果相同,无特化。
~getter_setter();
默认析构函数,无功能。
getter_setter<DATA_TYPE>& change_setter
(std::function<DATA_TYPE(DATA_TYPE)> setter);
修改依赖注入器setter,需要满足流式依赖注入器。
getter_setter<DATA_TYPE>& change_getter
(std::function<DATA_TYPE(DATA_TYPE)> getter);
修改依赖获取器getter,需要满足流式依赖注入器
getter_setter& operator =(DATA_TYPE data);
重载了代理的赋值符号,会将data数据走一遍依赖注入器后才把数据注入该容器。
operator DATA_TYPE();
重载了代理的隐式转化,会将data数据走一遍依赖获取器后才把数据返回给调用者。
DATA_TYPE move();
会将容器内数据以std::move的方式走一遍依赖获取器才把数据返回给调用者。
DATA_TYPE copy();
会将容器内数据以copy拷贝的方式走一遍依赖获取器才把数据返回给调用者。
DATA_TYPE& ref();
!!危险方法,会直接返回数据的引用,在修改引用时会略过setter过滤器,这应仅仅用于调用DATA_TYPE的函数。
using type = DATA_TYPE;
类内遍历类型的静态存储。可以静态获取其内部的数据类型。
最后再贴上该工具的运行内部流程图:
更多编写原理和运行示例代码详见: