Слияние кода завершено, страница обновится автоматически
使用Scala BNF解析模块,解析C++简单头文件。
主要实现以下功能:
1. 提取enum定义及其值
2. 提取Class的定义(只关注普通数据成员),不包含static数据成员和mutable数据成员。
注意:
不要在头文件中有任何实现的方法,请转移到cpp文件。C++语言的语法太复杂,特别是加入了C++11以后更加复杂,本人比较愚钝
要实现函数的定义,估计写个几年都写不完。。因此只关注声明性质的C++语句。。
支持一下数据类型:
1. 基础数据类型,bool\char\short\int\long 包含无符号。
2. 支持enum、class作为数据成员
3. 支持vector\set\list\map作为数据成员,STL容器包含的数据类型可以为 (1)(2)支持的数据类型.
4. 支持shared_ptr\weak_ptr作为数据成员,并且可以作为容器的数据成员.
5. 不支持原始的指针成员,完全可以使用shared_ptr\weak_ptr替代。
cn.newzai.parser.cplusplus 包,未解析C++类头文件的相关类,
cn.newzai.parser.cplusplus.result 包,包含解析后的结果,类和枚举
cn.newzai.parser.cplusplus.result.generate 包,包含自动代码生成的内容
一:类方法的自动生成,包含自动生成默认构造函数、拷贝构造函数、复制函数、Get和Set方法
二:自动生成proto(protobuf 消息定义文件),并且生成了C++类和protobuf message类之间的转换接口,
特化 toMessage,fromMessage 2个方法。
三:生成C#类,及其与protobuf消息之间的转换方法
四: 生成Scala类,及其与protobuf消息之间的转换方法
五:所有的generate都是trait,可以定制自己要生成的目标语言,进行扩展。。
本工程的目的,是自动化开发,开发网络通信的时候,减少客户端和服务器之间的编码。。。让我们用更多的时间关注与与业务。
为何选择protobuf作为消息格式: 因为效率高,使用起来方便,不需要自己编解码。。
为何还要转换呢,为何不在业务中直接使用protobuf生成的对象呢:不太适合,这样耦合太多。。因此使用toMessage、fromMessage,来做编解码,相对于业务对象和消息对象之间的桥梁吧,减少耦合。
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )