Linux应用框架cpp-tbox之弱定义

cpp-tbox项目链接 https://gitee.com/cpp-master/cpp-tbox

cpp-tbox( 全称C++ Treasure Box,C++百宝箱),是一个基于 Reactor 模式的服务型 开发框架组件库

主线程以 Reactor 模式处理非阻塞 IO 事件,并配合 ThreadPool 执行大运算与阻塞性操作。

请添加图片描述

该模式避免了多线程模式竞态加锁的烦恼,程序稳定可靠。

本人从2023年8月份开始使用这个框架以来,至今(2024年5月)已将近10个月。使用起来还是十分的舒服,框架提供了非常实用的开发组件(通信库、线程池、定时器池、协程、日志、命令终端、状态机、行为树等),使得开发者能够专注于业务逻辑开发,不用接触晦涩的系统调用接口。

cpp-tbox的作者拥有13+年C++开发经验,代码风格十分干净,附带单元测试用例,质量可靠。整体代码使用C++11标准,是学习Modern C++的好教材。

我们永远写不出我们没有看到过的代码,阅读优秀的开源代码是提高代码设计能力的一个途径,让我们一起来挖挖cpp-tbox中的宝藏,学习、吸收其中优秀的设计!

弱定义

学过C/C++的都知道,main函数是程序的入口点,是程序开始执行的地方。每个可执行的C或C++程序必须包含一个main函数。

但是参照官方提供的demo,我们会发现:demo没有定义main函数,编译竟然没有报错,而且生成的可执行文件还能运行!

阅读源码,其实能够发现,main函数在库里面定义并实现了,只不过被__attribute__((weak))修饰:

__attribute__((weak))
int main(int argc, char **argv)
{
    return tbox::main::Main(argc, argv);
}

在C和C++编程中,attribute((weak))是一个编译器特性(attribute),主要用于告诉编译器或链接器对待特定的函数或全局变量为“弱定义”(weak definition)。

这意味着如果有其他地方提供了强(strong)定义,那么弱定义会被覆盖;如果没有强定义,弱定义则会被使用。

同样地,还有以下接口使用了弱定义:

void RegisterApps(Module &apps, Context &ctx);
std::string GetAppDescribe();
std::string GetAppBuildTime();
void GetAppVersion(int &major, int &minor, int &rev, int &build);
void OnAbnormalExit();

如果用户不自己实现,库中有一个默认的实现,如果用户实现了,最终就会覆盖默认实现。

总结

  1. 弱定义对于库和框架开发尤其有用,允许库提供默认实现,但允许最终用户覆盖这些实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值