啥也不说了,直接上代码。
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
|
啥也不说了,直接上代码。
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
|
一、重构之前一定要对原有代码有一套可靠的测试机制,并且测试要有自我检测能力。
第六章主要是讲的最简单的重构方法,就是对函数的重构。重构的目的就是要让函数更容易理解,思路更清晰。个人觉得重构的目的主要是针对开发者,能让维护者更容易理解而已。对函数的效率没有太多帮助,用作者的话来说就是应该放到优化中去做。有了易理解的函数,清晰的思路,优化起来那是事半功倍!
几个比较重要的重构的小方法:
1、Extract Methord:提取函数。将大函数分解为多个独立功能的小函数。小函数更容易阅读和理解。
2、Replace Temp with Quary:用查询函数替换局部变量。过多的局部变量会影响阅读。
3、Replace Methord with Methord Object:用函数对象替换函数。
将win32的lib库直接转为winRT静态库需要注意三点
1、打开/ZW开关,关闭/GM开关
2、忽略OLE32.LIB
3、手动使用命令/AI包含Windows.winmd(从工程中add new references无效) /FU Platform.winmd /FU Windows.winmd /AI “$(VCInstallDir)vcpackages” /AI “$(WindowsSDK_MetadataPath)”
剩余的工作就是修改编译错误了
WinRT类型的动态库,可以认为导出的是类,应用通过创建类的实例来引用该导出类的功能即接口。
这里需要注意的是导出类的public成员只能是接口(成员变量是不可以为public),这样就避免了暴露类结构,并且接口中的参数不能为native type(例如:void* dd就不可以作为参数)。
最近由于再开发Win 8 metro程序和准备开发Win Phone 8 App,学习了下WinRT开发,包括一些C++ 11新标准内容,最初对Lamdba表达式的表达很是头疼,对以往的编程认识非常不同,这也就让我对它产生了浓厚的兴趣,找了很多资料来学习它,并且写了好多程序去测试它,慢慢发现其实Lamdba表达式真的很有趣!
其实对Lambda表达式不必有任何的畏惧心里,通过仔细的分析它,我发现其实Lambda表达式就是一个函数,是一个匿名的函数,是一个可以自己执行的自己的函数。就这么简单!下面我们来看一个例子:
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 |
|
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
|
输出:
Time:78ms
Time:94ms
Time:62ms
Time:109ms
从输出结果可以看出
WideCharToMultiByte和MultiByteToWideChar转换效率要比mbstowcs和wcstombs高。
注意:如果使用mbstowcs则需要Disable Specific Warnings:4996
1、将文件加到工程中
2、选中文件,右键属性->Content->True
1、 C++ Metro App :AddReference
Project->Properties->Common Properties->Framework and References->Add new Reference…
2、 C# Metro App :AddReference
Right click References folder orRight click Project->Add Reference
在类中可以定义引用类型的成员变量,但是必须在构造函数之前完成初始化,也就是必须在构造函数的初始化列表中完成初始化。
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 |
|
注意如果将初始化列表去掉,改为在构造函数中初始化,则编译器会提示: error C2758: ‘Functor::_evenCount’ : must be initialized in constructor base/member initializer list
最近一直在折腾动态库,静态库,N多个库,编译,连接,排查link error,搞的头都大了!真奇怪为什么要搞那么多库!功能是分的很清楚了,但是没人了解全部了,三个国家的人再搞,没有一个整体负责的人,没有说明,只能看代码,摸索!终于搞定了吧,又得merge到其他breach上,又是新的一轮编译,连接,排查!
终于在下班前搞定了,虽然还有点小问题,但是已经基本正常了,谢天谢地~,给其他同事讲解的时候,还是比较自豪的,哈哈,这么多的东西,要搞懂还真不容易那