专职C++

不能停止的脚步

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  163 Posts :: 7 Stories :: 135 Comments :: 0 Trackbacks

常用链接

留言簿(28)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

#

说明

因为工作需要分析protobuf的数据,google了一下,我个人没有找到合适的,就参考google protobuf文档,写了一个分析工具。这个项目用的是C++Builder XE10.2, win64实现。 
因为是临时定的代码,就写的很随意了,很少注释。

编译工具

C++ Builder XE 10.2

说明

  • 由于C++Builder自带的C++编译不支持C++11,只好选择64位版本。
  • 包中已经带有已经编译好的 prototools.x64.exe , 可以在64位系统下直接运行。
  • 使用的时候,对应的树节点,请点右键,做相应的选择。
  • 注意,要分析数据是原始生成的protobuf数据,保存到文件。

代码地址

https://code.csdn.net/zdhsoft/protobuf_tools/tree/master

posted @ 2017-08-19 21:51 冬瓜 阅读(1267) | 评论 (0)编辑 收藏

简述

在开发过程中,如果代码很整齐的话,那么这个代码就会看起来比较舒服。就像看到一个整洁的屋子一样。 
其中,=,:等对齐,则是一个重要的整洁处理。

Better Align

这个就是vscode的对齐插件,启动vscode,进入插件管理,没有安装的话,搜索一下,很快就有了。然后安装即可。vscode的插件管理真是做的很不错,易用。

使用

安装完成后,就可以使用了 
将光标移到要对齐的代码块,然后安一下ctrl+shift+p,然后输入命令,就立马对齐了。 
如下图演示 
Comma-first sytle 
Comma-first sytle 
Trailing comment 
Trailing comment 
Align within selection 
Align within selection

快捷键设置

如果老是输入命令,确实很麻烦,可以配置快捷键 
我这里配置的是ctrl+alt+= 
如下图:文件->首选项->键盘快捷方式,如下图 
这里写图片描述 
进入之后:在键盘快捷方式编辑中,点击keybindings.json, 
这里写图片描述
进入json设置后 
这里写图片描述
然后我输入ctrl+alt+= 
这里写图片描述
然后输入操作内容

    {
"key": "ctrl+alt+oem_plus",
"command": "wwm.aligncode",
"when": "editorTextFocus && !editorReadonly"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

这里写图片描述 
这样,就可以使用快捷键操作了

posted @ 2017-08-14 12:36 冬瓜 阅读(3906) | 评论 (0)编辑 收藏

原文地址:http://www.infoq.com/cn/news/2017/08/vs2017-153

从Visual Studio 2017 15.3预览版的发布时间表中可以看出,Microsoft似乎马上要发布这一版本的正式版。过去几周对VS2017 15.3的改动主要集中在问题修复上,开发人员可以注意到,最近的VS2017 15.3 Preview版本提供了对C# 7.1的支持,对C++语言服务的改进,以及对IDE自身的几处改动。通过几个重要的问题修复,提高了稳定性和性能。

C++开发人员将看到一些IDE的改动,例如一些常用模板的位置发生了改变。基于Win32的项目现在可以在Windows 桌面类别下找到。Windows控制台和桌面程序模板在创建过程中不需要调用向导,可以分别创建他们各自的项目。Windows桌面向导可供需要的人员使用。

15.3的Preview目前已经支持C# 7.1的语言特性。InfoQ的首席编辑Jonathan Allen分两部分对这些特性进行了深入介绍。第一部分关于异步主函数(Async Main)和默认表达式(Default Expressions),第二部分探讨了推导元组名(Infer Tuple Names),以及使用泛型的模式匹配(Pattern-matching with Generics)。有了15.3 Preview,开发人员现在可以在VS2017中体验这些特性。

一个很有用的特性是增加了信息栏。如果有一个安装的扩展程序运行不正常,信息栏将给出通知,允许用户决定是否禁用有问题的扩展程序,或者不管它。

VS2017 15.3增加的其他特性包括命令行工具vswhere.exe。可以使用该工具获得VS2017安装实例的信息。该工具在15.2版本中首次出现,但是在15.3版本已经被修改,不再默认显示VS2017 Preview的实例。要获得预览版的安装信息,需要加入命令行参数prerelease。

修复的问题有:

  • 启用轻量级解决方案负载可以减少构建解决方案的时间
  • 修复了解决方案管理器工具窗口,这样文件自动定位功能可以正常运行
  • 各种稳定性方面的改进和问题修复

如往常一样,不建议将Visual Studio预览版用于生产系统。感兴趣的开发人员现在可以下载Visual Studio 2017 15.3 Preview,也可参看完整的版本说明

查看英文原文: Visual Studio 2017 15.3 Preview Nears Final Release

posted @ 2017-08-11 20:00 冬瓜 阅读(909) | 评论 (0)编辑 收藏

之前,都是在32位Android手机上,做测试。然后搞了一个64位手机,就不行了。

分析后,先是报:is 32-bit instead of 64-bit

然后,再自己的CPP的库中,修改Application.mk,将APP_ABI :=armeabi改为APP_ABI :=armeabi arm64-v8a

这样生成的时候,就会得到两个版本的so

第一种情况解决后,第二种情况又来了,就是找不到lib

原来,我是通过/data/data/com.xxx.xxx/lib访问so的,结果在64位安装后,lib这个是无效的,然后就加载失败。

最后通过ApplicationInfo取到。

  1. public static String GetNativePath() {  
  2.     String ss = m_Context.getApplicationInfo().nativeLibraryDir;  
  3.     if(ss == null) ss = "/data/data/com.hxxx.yyy/lib";  
  4.     return ss;  
  5. }  

然后问题解决。
posted @ 2017-08-03 14:50 冬瓜 阅读(1981) | 评论 (0)编辑 收藏

     摘要: C++17标准在2017上半年已经讨论确定,正在形成ISO标准文档,今年晚些时候会正式发布。本文将介绍最新标准中值得开发者关注的新特新和基本用法。

总的来说C++17相比C++11的新特性来说新特性不算多,做了一些小幅改进。C++17增加了数十项新特性,值得关注的特性大概有下面这些:  阅读全文
posted @ 2017-07-28 13:25 冬瓜 阅读(1795) | 评论 (1)编辑 收藏

从上次六一安装试用RAD,这就样过了快两个月了,就想用一下看看,结果报MSBUildToolsPath is not specified for the ToolsVersion "14.0",google了一下,找到原因了,因为我有装过vs2015,但是真心不好用,就卸载了,装了vs2013,于是就报这样的错了。卸载是是比较干净的,但是还是有一个地方注册表有漏了,就是32位注册表(没想64位windows会有64和32两份注册表),
运行:c:\windows\SysWOW64\regedt32.exe
找到:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\14.0

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersion\14.0
然后删除,就可以了。

再去行RAD,就不报这个错了。
然后就可以开开心心写了一个android例子,顺利跑了起来。

posted @ 2017-07-21 10:07 冬瓜 阅读(1120) | 评论 (0)编辑 收藏

     摘要: JetBrains 在 2016 年底至 2017 年初期间,对 5000 多名开发人员进行了调查,以研究最新的开发生态。

最近,调查结果已公布:Java 被评为最流行的语言,JavaScript 是最常用的语言,而 Go 被认为是最有前途的语言。  阅读全文
posted @ 2017-07-19 15:34 冬瓜 阅读(982) | 评论 (0)编辑 收藏

一、说明

在es6中增加了一个class,简单明了,比ES5下面强多了 
每个类都有会有一个构造函数constructor。如果没有申明,则会默认分配一个空的。 
如果需要调父类的构造函数,需要在constructor第一行调用super,至于为什么,已经有N多文档说明了。 
例如:

class a {
constructor(m) {
this.m_m = m;
}
};
class b extends a {
constructor(m, m1) {
super(m);
this.m_m1 = m1;
}
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

二、属性方法

在es6中,使用get和set来标明属的读写函数

class a {
constructor(m) {
this.m_m = m;
}
get m() { return this.m_m; }
set m(v) { this.m_m = v; }
};
let testa = new a(1999);
console.log(testa.m);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里就会 打印出1999

三、非静态成员函数

class a {
constructor(m) {
this.m_m = m;
}
get m() { return this.m_m; }
set m(v) { this.m_m = v; }
mult(k) {
return this.m_m * k;
}
add(k) {
return this.m_m + k;
}
sub(k) {
return this.m_m / k;
}
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里可以看到,不需要用function了,又是做了大大的简化。

四、静态成员函数

只需要在类的成员方法前,加一个static关键字就可以了,如果同一个类的静态函数,可以用this来调用。如下面的astatcfun1调用astatcfun,也可以用类名.的方问,如astatcfun2调用astatcfun,建议还是用this,在使用的时候,静态方法,不需new出对象来,直接用对象.的方式,如下面的testcall调用a的静态方法。也可以派生给子类。

class a {
constructor(m) {
this.m_m = m;
}
static astaticfun() {
return 100;
}
static astatcfun1() {
return this.astaticfun() + 200;
}
static astatcfun2() {
return a.astaticfun() + 200;
}
get m() { return this.m_m; }
set m(v) { this.m_m = v; }
mult(k) {
return this.m_m * k;
}
add(k) {
return this.m_m + k;
}
sub(k) {
return this.m_m / k;
}
}; //
function testcall(){
console.log(a.astaticfun());
console.log(a.astatcfun1());
console.log(a.astatcfun2());
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

静态成员函数的调用

class a {
static aaa() {
return "aaa";
}
static bbb() {
return this.aaa() + "bbb"; //同一个类的静态函数调用函数,只需要用this.就可以
}
kkk() { return "kkk"; }
ccc() {
return a.aaa() + "ccc" + this.kkk(); //同一个类的非静态函数调用静态函数,则需要类名.的方式
}
};
let c = new a();
console.log(a.bbb());
console.log(c.ccc());
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

五、派生

在ES6的派生通过extends这个关键字就可以,如

class b extends a() { };
posted @ 2017-07-17 11:47 冬瓜 阅读(623) | 评论 (0)编辑 收藏

     摘要: 本文不是为了让读者去评判这些程序媛的颜值,而是为了让大众知道,在代码背后,也存在这样一群女性,她们利用自己的技术战胜了世人的偏见,用自己的实力赢得了如今的地位。在这个男性统治的数字世界,她们的成就尤为不易。未来,应该有更多的程序媛,而不是程序员鼓励师。  阅读全文
posted @ 2017-07-06 11:03 冬瓜 阅读(780) | 评论 (0)编辑 收藏

C++语言做为一个计算机语言,无可厚非的可称为最牛的语言之一。每种语言都有其应用场景。对于反射,运行时类型,其实也只是C#和java这种语言需要的多,而这种语言应用场景和C++是不重叠的。如果强用C++写这些场景的应用,我只能说,哭吧,不是罪。
现在大量的应用,都开始使用更轻量的级的语言了,如javascript,go,swift,lua等。这些语言,也同样没有反射,只提供了少量的运行时信息,但用他们开发起来,比C#和java要轻很多。现在很多手机端app,你则可以很轻松实现,而用java或Objective C,则是各种苦恼!
所以,当 华夏之火吐糟C++的时候,你知道有多少人在吐糟java和C#吗?如果说起php是最好的语言,你服吗?

C++的String和STL相比C#和java确实要差一些,早期版本的STL库还非常难读,还很多个版本实现。但是java和C#这些库比起javascript,lua等语言重很多了。

所以具体的开发,还是选择合适的语言,这样开发,才能呵呵。在各自的应用场景,其实是不能相互替代的。
posted @ 2017-07-05 16:16 冬瓜 阅读(666) | 评论 (0)编辑 收藏

仅列出标题
共17页: 1 2 3 4 5 6 7 8 9 Last