前言
很多人从传统角度认为,在嵌入式中使用C++模板会导致代码膨胀(特别是STL),在flash紧张的嵌入式系统中是没法使用的,但实际上并非如此,比如像封装底层驱动驱动,零成本的抽象,基于C++的模板对RTOS的进行封装,可变参数模板,还可以进行编译期检查,十分的方便
形参包
模板形参包是接受零个或更多个模板实参(非类型、类型或模板)的模板形参。函数形参包是接受零个或更多个函数实参的函数形参。至少有一个形参包的模板被称作变参模板,对于形参包的解包方法随着C++的发展也有了非常多的变化,下面介绍一下我最近使用的一些套路。
1 | template <gpio_num_t num> struct z_gpio |
上面的代码对gpio的操作进行了一个简单的封装,但是在实际工程中初始化时,需要对多个GPIO进行初始化,所以我们需要以可变模板的形式对其进行封装。
1 |