Looking at this project (http://www.savarese.com/software/libssrckdtree/) I found the definition "C++ header-only template library". At the moment I have basic C++ knowledge but would like to know what this exactly means and why this people use it on this project
相关问题
- Sorting 3 numbers without branching [closed]
- How to compile C++ code in GDB?
- Why does const allow implicit conversion of refere
- thread_local variables initialization
- What uses more memory in c++? An 2 ints or 2 funct
相关文章
- Class layout in C++: Why are members sometimes ord
- How to mock methods return object with deleted cop
- Which is the best way to multiply a large and spar
- C++ default constructor does not initialize pointe
- Selecting only the first few characters in a strin
- What exactly do pointers store? (C++)
- Converting glm::lookat matrix to quaternion and ba
- What is the correct way to declare and use a FILE
The short answer is that templates are much like macros for the compiler to generate code. Each time you instantiate it (for esample, using a type like
std::list<int>
), the compiler has to have the original code to insert the correct type (in this caseint
) in the code of the template class. This is why template classes are included in.h
files each time you have to use them in.cpp
files.It means that there are no modules in the library, only headers. That means the library can be used without requiring it to be first compiled and later linked in; just include the headers in your own source modules.
The benefits of this approach are
In this case, the container datastructure implemented templated on the type of data it contains, so it cannot be fully compiled.
It exactly means that library redistributed only as headers. To use it, you only need #include it in your source files.
It means all the definitions of template (function template or class template) are in the headers only. There is no
.cpp
file. There are only.h
files (or some other extensions such as.hpp
or no extension at all like<vector>
,string>
etc)C++ compilers require the definitions of templates to be present in the same file in which they're declared. As such, the header-only library is neither static library or dynamic library. Its source-code library which means you can see the implementation in the headers. You've include the header files in your code, which gets compiled along with the headers from the library.
Note the part of the C++ Standard Library which makes use of templates such as
<vector>
,string>
,<map>
, etc is header-only library.Actually templates (class templates and function templates) cannot be compiled into static or dynamic library to be linked to programs. A template is, as the term itself says, a template; it's not normal code; its only when you use it in your code passing template argument(s) (which is either
type
orvalue
), the compiler generates a compilable function/class out of the function/class template:Here,
A
cannot be compiled into binary (static library or dynamic library), because the compiler doesn't know whatT
is. ButB
can be compiled into binary, as the compiler has complete information about it.So you can read the phrase "class template A" as :
A
is a template for a class.A
itself is not a class. ButB
is a class, its not a template.As the class template
A
cannot be compiled into static or dynamic library to be linked to your programs, soA
can be shipped only asheader-only
library with full source code. LikewiseIt means that you do not have to link any external libraries during the linking phase of your development. You only have to download the library and use #include macros to use the library. It simplifies deployment of your application down the road, but sometimes at the expense of longer compiler times.
It's "header only" because it contains no separate .cpp files, only .h files and so you can just
#include
all the library code into your code.This can be advantageous since you don't have to link against a static library which can be very painful.