头函数最小包含的重要性以及必要性

来源:互联网 发布:windows如何录屏 编辑:程序博客网 时间:2024/05/21 17:25

在《google c++ style guide》编程规范中,其中提到头函数最小包含的问题,这里细说一下我在项目遇到的坑,以及对最小包含的理解。

何为头函数最小包含?具体的说就是:在一个头函数中,当一个前置声明足够时,不要使用#include,不适用命名空间(using namespace)。

基本说来,在头函数中,可以使用#include的情况大概有这么几种:

1,头文件中用到的基础库类,如 #include <vector>, #include <map>

2,头函数中继承的父类,如 #include "Strategy.h"

3,不涉及宏,非通用模块的结构体定义类, 如 #include "def.h"

4,封装的、使用的非常成熟的基础类,(不建议)如: #include "base/string_util.h"


总而言之,除了1,2情况外,其他两种能够少用#include,尽量少用,否则你程序明明没错,但是经常会遇到:expected primary-expression ...... ,expected unqualified-id......等等等等一系列莫名其妙的错误。而且这种问题往往要从一个文件,追到另一个文件,再从一个文件,追到另一个文件,往往要精疲力尽地找上个十万八千里才能发现问题在哪。而且编译缓慢,每一次编译都要重新编译头文件中所有的文件。

避免的方法:

在头文件中,只申明,不具体构造。

e.x.  class StringHandler;

      scoped_ptr string_handler_<StringHandler>;

在具体的cc文件中,再具体的构造:

      string_handler_.reset(new StringHandler());

在具体的函数参数传递时,尽量使用引用和指针,这样不仅可以最小包含,还能提高运行效率(类参数传递时,不需要调用类的拷贝构造函数)

e.x.  void Function_Do(const MyClass& in, MyClass* out);


以上,个人无聊总结,希望对大家有用。

0 0