首页

QuickInfo在VS2019中的改进:颜色和在线搜索  

2项新改进 Visual Studio系列中的QuickInfo提示,对于开发人员来说,是一项非常方便的特性。简单来说,QuickInfo可以在你编写代码的时候,实时显示当前编写代码的辅助信息,例如函数原型,数据类型等。 在Visual Studio 2019 (v16.1) 预览版3中,这项功能有了新的改进:添加了颜色及在线搜索功能。今天就来简单介绍一下这两个改进。 自定义QuickInfo提示...

小技巧:使用对象机制实现组件初始化及销毁  

问题 最近在对一份代码进行重构的时候,发现在特殊情况下,组件的销毁接口会因为程序的异常而得不到调用,这个虽然不是什么大问题(整个程序都出现异常了,进程退出是即将发生的事情),但是对于有点完美主义的我来说,这个的的确确的,降低了程序的异常安全性。 解决方法 我们先来看下面一张图,它描述了程序改造之前的交互场景: 在上图中,我们在CWinApp对象的InitInstance中调用了组件的Init接口...

实战经验:通过类成员函数指针实现类方法调用

在开发中,有时候可能需要使用到类成员指针来调用类的方法。例如,可能会有一个函数调用表格,根据不同的情况调用表格中不同的类成员函数。今天使用一个简单的例子来讲述如何使用类成员函数指针。 类成员函数指针定义 因为函数是一个类的成员,所以它的指针定义有别于全局函数,格式如下: typedef 返回值(类名::*函数指针类型名称)(参数列表); 需要注意的地方 1) 使用typedef创建一个用户自定义类...

深度理解:struct和class的区别  

C中struct和class的区别 1) 在C语言中,无class关键字,因此,如下的代码片段是无法通过编译的。 2) C语言中的struct不能定义函数,仅能定义数据成员。所以,我们通常使用struct来构建数据结构。 在如下的代码片段中,我们定义了两个数据成员,但是如果在这个结构体中尝试定义一个Play方法,则会编译失败。 C++中struct和class的区别 1) struct默认的...

深度理解:main函数的返回值  

最近碰到这样的一个问题:main函数的返回值的作用。 main函数的前世今生 每一个C程序都会有一个main函数作为入口点,这里所谓的入口点,也即程序一开始就会尝试找到main函数的位置,并从main函数的第一行代码开始执行。 那么,第一个问题:入口点之前是什么?main函数执行完之后,又是什么?这有点像:宇宙大爆炸之前的那一刻是什么状态? 我们来创建一个最简单的C程序,来看看入口点之前是什么? ...

深度理解:如何返回一个CString对象  

考察以下程序片段 LPCTSTR GetString1() { CString str(_T("")); str.Format(_T("%s"), _T("Hello")); return str; } CString GetString2() { CString str(_T("&quo...

实战经验:pimp技法实现面向接口编程  

在大型工程中,编译时依赖会逐渐成为一个问题。每当我们修改了组件的内部实现,都影响到了组件的客户,导致客户代码重新编译,这种情况对于大型工程往往是不可接受的,微软的COM技术尝试通过接口解决此问题,但是不足之处是:COM技术依赖注册表实现组件的定位,这大大限制了组件的跨平台能力。今天,我们来讲讲pimp技法,实现轻量级的面向接口编程。 示例代码 =====================MyCo...

深度理解:#pragma once防止文件重复包含  

今天的主题,做C++的朋友可能都不会太陌生。此文的目的,主要是深挖一下这个#pragma once。 示例代码 =====================MyBase.h===================== #pragma message("Including MyClass.h") #pragma once class CMyBase { public...

实战经验:避免在组件接口中使用unsigned  

示例代码 =====================MyList.h===================== #pragma once #include <windows.h> class CMyList { public: CMyList(void) {} ~CMyList(void) {} public: UINT GetSize1() c...

深度理解:类前置声明的使用

首先我们看这样一个示例程序: =====================CX.h===================== #pragma once class CX { public: CX(void); ~CX(void); }; =====================CX.cpp===================== #include "...