Ope*_*way 10 c++ templates header-only
看看这个项目(http://www.savarese.com/software/libssrckdtree/),我找到了"C++ header-only template library"的定义.目前我掌握了基本的C++知识,但想知道这究竟意味着什么以及为什么这个人在这个项目中使用它
Naw*_*waz 13
这意味着模板的所有定义(函数模板或类模板)仅在标题中.没有.cpp档案.只有.h文件(或一些其他的扩展,例如.hpp或者都像没有扩展名<vector>,string>等等)
C++编译器要求模板的定义出现在声明它们的同一文件中.因此,仅头文件库既不是静态库,也不是动态库.它的源代码库意味着您可以在标头中看到实现.您已在代码中包含头文件,这些头文件将与库中的标头一起编译.
注意C++标准库的一部分,其利用的模板,例如<vector>,string>,<map>等是仅头库.
实际上模板(类模板和函数模板)无法编译成静态或动态库以链接到程序.正如术语本身所说,模板是一个模板; 这不是正常的代码; 只有当你在代码传递模板参数(或者是type或者value)中使用它时,编译器才会从函数/类模板中生成一个可编译的函数/类:
template<typename T>
struct A
{
T data;
};
struct B
{
int data;
};
Run Code Online (Sandbox Code Playgroud)
在这里,A不能编译成二进制(静态库或动态库),因为编译器不知道是什么T.但是B可以编译成二进制,因为编译器有完整的信息.
所以你可以阅读短语"class template A":A是一个类的模板.A本身不是一个阶级.但是B是一个类,它不是模板.
由于类模板A无法编译为静态或动态库以链接到您的程序,因此A只能作为header-only具有完整源代码的库提供.同样
一些库采用二进制文件的形式,您必须与项目链接,以及定义可用类或函数的头文件。“仅标头库”将是不包含二进制文件的库,仅包含您在源中包含的标头。
模板是根据其特定用途定制的类或函数;它们通常在头文件中定义,因为编译器必须读取它们的源代码来自定义它们。在您确切地知道将如何使用模板之前,您无法将模板编译为二进制文件,因此您将源代码与您自己的代码一起包含在内,然后编译器可以一起处理它们。
| 归档时间: |
|
| 查看次数: |
4070 次 |
| 最近记录: |