码迷,mamicode.com
首页 > 其他好文 > 详细

QDemo之前置声明

时间:2015-10-06 11:43:43      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

前置声明 = Forward Declaration

对于一个刚刚接触include写法的童鞋来说,

突然看到很多人用如下写法:不知甚解否?

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

//! [前置声明]
QT_BEGIN_NAMESPACE
class QPushButton;
class QLabel;
class QLineEdit;
QT_END_NAMESPACE
//! [前置声明]

class Dialog:public QDialog
{  Q_OBJECT  public:
    Dialog();
    ~Dialog();
};

#endif // DIALOG_H

这里记录下自己对此的探究过程:

首先,在Qt自带的一些例子、内置类库,就可以看到这种写法:

技术分享

技术分享

同样的Qt其他例子程序以及其他内置类,你慢慢看都会找到类似的很多“前置声明”写法,

那么,重点来了:

前置声明到底是什么(what)?有什么用(why)?用在哪里(where)?

what:简单来说,

在Qt里就是如下的一种写法:

//! [前置声明]
QT_BEGIN_NAMESPACE 
class QPushButton; //随便你
class QLabel; //还是随便你
class QLineEdit; //就是随便你
QT_END_NAMESPACE
//! [前置声明]

why:通俗易懂点说,

  1. 可以避免多个include产生的文件依赖,提高编译速度;
  2. 可以避免重复indude导致的相互引用问题,提高容错;
  3. 以及其他...以后补充
  4. 其实在Qt有点不爽的是,用了前置声明,在new的会看不到自动补全的提示。

where:直接看Qt官方的使用,

Qt里中的控件类QPushButton、QLabel等等都是一定、肯定、保证定义好并且可以使用的,

那么我们就可以直接用前置声明来写,因为这些控件类不需要我们去操心,肯定能用。

而什么情况下不适合用呢?

比如自定义了一个类继承QDialog,那么QDialog最好用不要用前置声明,而建议用include。


再次声明:本篇完全是个人理解方式、错误难免,忘指正。


QDemo之前置声明

标签:

原文地址:http://my.oschina.net/jannn/blog/513687

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!