mirror of
https://github.com/fmtlib/fmt.git
synced 2024-12-25 15:21:54 +00:00
Add FMT_VARIADIC_VOID to emulate variadic functions on old compilers.
This commit is contained in:
parent
8198df84f0
commit
2f752abe97
32
format.h
32
format.h
@ -864,6 +864,35 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Generates a comma-separated list by applying f to numbers 1..n.
|
||||||
|
#define FMT_GEN(n, f) FMT_GEN##n(f)
|
||||||
|
#define FMT_GEN1(f) f(1)
|
||||||
|
#define FMT_GEN2(f) FMT_GEN1(f), f(2)
|
||||||
|
#define FMT_GEN3(f) FMT_GEN2(f), f(3)
|
||||||
|
#define FMT_GEN4(f) FMT_GEN3(f), f(4)
|
||||||
|
#define FMT_GEN5(f) FMT_GEN4(f), f(5)
|
||||||
|
#define FMT_GEN6(f) FMT_GEN5(f), f(6)
|
||||||
|
#define FMT_GEN7(f) FMT_GEN6(f), f(7)
|
||||||
|
#define FMT_GEN8(f) FMT_GEN7(f), f(8)
|
||||||
|
#define FMT_GEN9(f) FMT_GEN8(f), f(9)
|
||||||
|
|
||||||
|
#define FMT_MAKE_TEMPLATE_ARG(n) typename T##n
|
||||||
|
#define FMT_MAKE_ARG(n) const T##n &v##n
|
||||||
|
#define FMT_MAKE_REF(n) MakeArg(v##n)
|
||||||
|
|
||||||
|
#define FMT_TEMPLATE(func_name, n) \
|
||||||
|
template <FMT_GEN(n, FMT_MAKE_TEMPLATE_ARG)> \
|
||||||
|
inline void func_name(BasicStringRef<Char> format, FMT_GEN(n, FMT_MAKE_ARG)) { \
|
||||||
|
const fmt::internal::ArgInfo args[] = {FMT_GEN(n, FMT_MAKE_REF)}; \
|
||||||
|
func_name(format, fmt::ArgList(args, sizeof(args) / sizeof(*args))); \
|
||||||
|
}
|
||||||
|
|
||||||
|
// Defines a variadic function returning void.
|
||||||
|
#define FMT_VARIADIC_VOID(func_name) \
|
||||||
|
FMT_TEMPLATE(format, 1) FMT_TEMPLATE(format, 2) FMT_TEMPLATE(format, 3) \
|
||||||
|
FMT_TEMPLATE(format, 4) FMT_TEMPLATE(format, 5) FMT_TEMPLATE(format, 6) \
|
||||||
|
FMT_TEMPLATE(format, 7) FMT_TEMPLATE(format, 8) FMT_TEMPLATE(format, 9)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\rst
|
\rst
|
||||||
This template provides operations for formatting and writing data into
|
This template provides operations for formatting and writing data into
|
||||||
@ -1249,6 +1278,9 @@ class BasicWriter {
|
|||||||
BasicArg<> arg_array[internal::NonZero<sizeof...(Args)>::VALUE] = {args...};
|
BasicArg<> arg_array[internal::NonZero<sizeof...(Args)>::VALUE] = {args...};
|
||||||
this->printf(format, ArgList(arg_array, sizeof...(Args)));
|
this->printf(format, ArgList(arg_array, sizeof...(Args)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
FMT_VARIADIC_VOID(format)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
Loading…
Reference in New Issue
Block a user