From c3776fb96719eef20c225dc45271f92d067e0834 Mon Sep 17 00:00:00 2001 From: Riyyi Date: Tue, 26 Jul 2022 12:28:35 +0200 Subject: [PATCH] Util: Store formatting parameters in a non-variadic container --- src/util/format/format.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/util/format/format.h b/src/util/format/format.h index 6c55ddd..24aadea 100644 --- a/src/util/format/format.h +++ b/src/util/format/format.h @@ -7,10 +7,10 @@ #pragma once #include // size_t +#include #include // stringstream #include #include -#include #include "util/format/builder.h" #include "util/format/parser.h" @@ -29,6 +29,7 @@ void formatParameterValue(Builder& builder, const void* value) format(builder, *static_cast(value)); } +// Type erasure improves both compile time and binary size significantly class TypeErasedParameters { public: const Parameter parameter(size_t index) { return m_parameters[index]; } @@ -40,16 +41,20 @@ public: protected: size_t m_index { 0 }; - std::vector m_parameters; + std::span m_parameters; }; template class VariadicParameters final : public TypeErasedParameters { public: VariadicParameters(const Parameters&... parameters) + : m_templatedParameters({ { ¶meters, formatParameterValue }... }) { - m_parameters = { { ¶meters, formatParameterValue }... }; + m_parameters = m_templatedParameters; } + +private: + std::array m_templatedParameters; }; // -----------------------------------------