第一次遇到我自己做的方向。。。聊聊我的看法吧
首先给不太了解这个架构的朋友介绍一下,通常所谓的 跨平台 方向,指的是 UI 上的跨平台,所使用的技术栈更多的是关注于 UI 怎么绘制,比如常见的 H5(Web),RN ,Flutter ,等等, 而 C/C++ 跨平台也是非常常见的,只不过局限于某些领域,比如音视频领域,安全领域等等,主要原因有几个,一个是成本太高,单单开发人员要熟悉 C/C++ 就是个不小的挑战了,二是业务逻辑没那么复杂也不需要那么多的 Native 实现。
我也是 Android UI 方向转下去做 C++ 跨平台开发的,C++ 虽然学校里学了一年,但 VC 6 跟现代 C++ 不说完全没关系吧,也没啥可参考的了,所以重新学习和熟练 C++ 也花费了不少时间和精力,现在也基本上熟悉这一套了。
1. 看自己项目相关的,有没有 JNI 相关的代码,如果有手写的(非模板生成的) JNI 代码,先了解一下 JNI 相关的基础知识,比如线程模型,Java env ,基础类型的映射,如何从 Java 调用 Native ,如何从 C++ 调用 Java ,看完这部分基本上就能把 UI 和 底层 之间的数据互通弄懂个七七八八的了。
2. 如果不需要关心 JNI (已经有模板了,或者是有其他人去做 JNI 的了),下一步就是了解项目用的 C++ 版本是多少,现代项目多数应该都是 C++ 17 了,少部分老项目可能是 C++ 14 ,再老的我感觉应该比较少了,尤其是新项目,至于 C++ 20 个人感觉不用太早了解,先了解完 C++ 14 和 C++ 17 的内容就差不多能写出能用的代码。
3. C++ 14 可以看 C++ Primer ,C++ 17 可以看网上新版本的介绍,大多数都是为了简化写法的,看到项目里不懂的语法去搜索,然后一个个的去看,读 API 文档,推荐
https://en.cppreference.com/w/ ,啥都有,sample 也有,不懂的就查
4. 如果是入门 C++ 还不久,想要快速了解 C++ 的基本语法,觉得 Primer 太厚了,可以看 《 Essential C++》,不厚,够用
5. 模板是个坑,没有一定的基本功不要乱写模板代码
6. 项目如果有 C++ Guideline 先熟读一遍,了解 Bad & Good, 尽量不要写出 Bad 的代码
7. 现代 C++ 写起来并不是特别的麻烦,像我们项目内部就拒绝原始的指针,绝大多数都是智能指针(shared_ptr, unique_ptr, week_ptr 等等,不是 auto_ptr 这种名字叫智能实则很智障的),也不推荐写 raw array ,用的也都是 vector 等等,已经挺接近 Java 之类的了,写起来就类似这样
```
const auto widget = Widget()
```
8. 熟悉并弄清楚几个经常会用错的比如 const 的用法,& 的用法 等等,先 ”抄“ 别人的代码,不明白的就网上搜
9. 如果有精力,可以搞一搞 C++ 的编译,比如 CMake (看项目用啥),以前觉得这个很难懂,照葫芦画瓢写过几次相关的优化之后觉得挺有意思的,虽然跟业务没啥关系,但对于了解整个项目的编译过程很有帮助,有利于成长(晋升)。