A tiny cross platform header-only boost implement including predef/config/shared_ptr/weak_ptr/bind/function、
对于一个常年在代码沙场上冲锋陷阵的 C++ 战士而言,shared_ptr、weak_ptr、bind、function 几个库就像是伴随着一起出生入死的心爱武器。现在写项目基本这几个库是库不离身,稍复杂的项目,缺一个都感觉是在裸奔。但是要用这几个库,要么带上一个几百M的 boost(害死有代码洁癖的强迫症患者),要么必须使用较新的编译器(不能适应对新编译器有偏执被害妄想的患者)。因此业余自己锤锤打打实现了这几个库,本来是自己大框架里的几个小功能,想着也许有其它人用得着,因此剥离出来,修改成标准接口,方便替换使用。
实现得很粗糙,满足当前需求,也就没有再深入去锤炼,加之水平有限,错误缺陷难免,欢迎指正建议。
这些功能有的直接从 boost 当中拿的(开源界的事,能叫偷吗?),有的是自己实现的。
- boost.predef 直接从 boost-1.68.0 当中拿的。
- boost.config 直接从 boost-1.68.0 当中拿的。
- boost.smart_ptr 自己实现的,包含 shared_ptr、weak_ptr、enable_shared_from_this,不依赖其它库。
- boost.bind 自己实现的,不依赖其它库。
- boost.function 自己实现的,依赖 boost.smart_ptr。
暂时没有需求再增加其它功能,但也可以考虑把 boost.any 这种轻而精的库拿进来。
这些功能其实是为了支持实现 boost.xxxx 标准功能而实现的辅助性功能。
- QAtomic 原子操作,支持 msvc、gcc。
- QFunctionTraits 支持函数及函数指针判断、成员函数 wrapper、参数及返回值推导等功能。
- QFunctionCaller 可根据返回值执行调用函数(对象),避免出现返回值编译错误。
- QBooleanable 实现了一些支持 safe_bool 手法的基类。
- QTypeList 这是 C++ 萌新进入模板元编程世界的魔法门。
还有一些其它小东西,也许也有用,有兴趣可以看看,按需可取用之
测试过以下环境
- Windows 7 上 vs2008
- macOS 10.14 上 xcode 10
- macOS 10.14 上 codelite 12
- boost 部分仍遵照 boost 授权,详见项目目录下 LICENSE_1_0.boost.txt
- 其余部分使用 Anti-996 授权,详见项目目录下 LICENSE_1_0.anti996.txt