从一个简单的开源库开始了解下设计C++库时头文件的目录结构,之所以讨论这个问题是想把代码在设计之初就能够有清晰的目录结构,另一个方面能够便于用户的调用,而不需要对我们所设计的库添加各种头文件的引用。
stxxl也许大多数熟悉C++编程的人并不熟悉,但是标准库STL确是大多数C++开发者熟知的,尤其是对于标准库中的std::vector,因为它实在是太好用了。但是这么好用的东西也是有它自身的限制的,这是因为标准库只能操作内存中的数据,想象一种情形,你想要使用std::vector,但是又不在内存上操作数据,这时stxxl::vector可以帮助到你。
先来看看stxxl include目录下的结构吧,下面是一张截图
在include目录下只有一个头文件,这里面包含了如下的内容
#ifndef STXXL_MAIN_HEADER
#define STXXL_MAIN_HEADER
#include <stxxl/bits/common/utils.h>
#include <stxxl/io>
#include <stxxl/mng>
#include <stxxl/vector>
#include <stxxl/stack>
#include <stxxl/priority_queue>
#if ! defined(__GNUG__) || ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100) >= 30400)
// map does not work with g++ 3.3
#include <stxxl/map>
#endif
#include <stxxl/unordered_map>
#include <stxxl/queue>
#include <stxxl/deque>
#include <stxxl/algorithm>
#include <stxxl/stream>
#include <stxxl/random>
#include <stxxl/timer>
#endif // STXXL_MAIN_HEADER
值得注意的是,stxxl目录下面io, stream, timer, stack, map之类的都是文件名而不是文件夹,它们是没有后缀的,其实标准库中也是这么去做的,比如常用的
#include <iostream>
这里iostream也不是文件夹而是文件名,打开这样的文件,里面的内容通常只有一句代码
#include <stxxl/bits/io/io.h>
在stxxl目录下的这些文件是进一步对stxxl/bits目录下头文件引用的进一步整理