gpt4 book ai didi

C++ header-only 模板库

转载 作者:可可西里 更新时间:2023-11-01 15:39:19 43 4
gpt4 key购买 nike

查看这个项目 (http://www.savarese.com/software/libssrckdtree/) 我找到了定义“C++ header-only template library”。目前我有基本的 C++ 知识,但想知道这到底是什么意思以及为什么人们在这个项目中使用它

最佳答案

表示模板(函数模板或类模板)的所有定义都只在头文件中。没有 .cpp文件。只有.h文件(或一些其他扩展名,如 .hpp 或根本没有扩展名,如 <vector>string> 等)

C++ 编译器要求模板的定义出现在声明它们的同一个文件中。因此,header-only 库既不是静态库也不是动态库。它的源代码 库意味着您可以在 header 中看到实现。您已将头文件包含在代码中,这些头文件与库中的头文件一起编译。

请注意 C++ 标准库中使用 <vector> 等模板的部分, string> , <map>等是仅 header 库。

实际上,模板(类模板和函数模板)不能编译成静态库或动态库链接到程序中。正如术语本身所说,模板就是模板;这不是普通代码;仅当您在传递模板参数(typevalue)的代码中使用它时,编译器才会从函数/类模板中生成可编译的函数/类:

template<typename T>
struct A
{
T data;
};

struct B
{
int data;
};

在这里,A无法编译成二进制(静态库或动态库),因为编译器不知道是什么T是。但是B可以编译成二进制,因为编译器有关于它的完整信息。

因此您可以将短语“类模板 A” 读作:A是一个类的模板。 A本身不是一个类。但是B是一个类,它不是一个模板。

作为类模板A无法编译成静态或动态库以链接到您的程序,因此 A只能作为 header-only 发货具有完整源代码的库。同样

关于C++ header-only 模板库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6200752/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com