| inc | ||
| src | ||
| test | ||
| .gitignore | ||
| .gitmodules | ||
| CMakeLists.txt | ||
| README.md | ||
const_fmt
An extremely lightweight library, intentionally resembling fmtlib as much as possible. This is achieved by moving
as much of the formatting process as possible to compile time.
Meant for systems with very few resources, such as embedded systems.
Overview
During compile-time, the string to be formatted is preprocessed to the point, only the actual values to be formatted have to be written (If they are not available at compile time).
For example One number: {:03}; And another one: {:05.3} is preprocessed into One number: 000; And another one: 00.000.
This is returned as a std::array<char, N>, where N is automatically evaluated. The only code executed at compile
time then formats the numbers and writes them into their place in the array.
Disclaimer: The actual formatting code is largely shamelessly stolen from fmtlib.
Building and running the tests
- Initialize the
googletestframework submodule
$ git submodule update --init
- Create the build directory
$ cmake -B build -S .
- Build the project
$ cmake --build build/
- Run the tests
$ ctest --test-dir build/
Limitations
Only a relatively limited subset of the fmtlib syntax is recognized (for now anyway). In particular,
there is no support for positional arguments, alignment, chrono format specs and custom format specifications.
By nature of the library design, which forces compile-time preprocessing of the format string, no dynamic width or dynamic precision can be implemented.