From 5edd2cec4e14735bc1664324277c534f0564141e Mon Sep 17 00:00:00 2001 From: Nikolay Rapotkin Date: Fri, 13 Mar 2020 11:20:24 +0300 Subject: [PATCH] Ability to join elements of std::initializer_list was added --- include/fmt/ranges.h | 25 +++++++++++++++++++++++++ test/ranges-test.cc | 7 +++++++ 2 files changed, 32 insertions(+) diff --git a/include/fmt/ranges.h b/include/fmt/ranges.h index 6110fdaf..0e8f1608 100644 --- a/include/fmt/ranges.h +++ b/include/fmt/ranges.h @@ -12,7 +12,9 @@ #ifndef FMT_RANGES_H_ #define FMT_RANGES_H_ +#include #include + #include "format.h" // output only up to N items from the range. @@ -360,6 +362,29 @@ FMT_CONSTEXPR tuple_arg_join join(const std::tuple& tuple, return {tuple, sep}; } +/** + \rst + Returns an object that formats `initializer_list` with elements separated by + `sep`. + + **Example**:: + + fmt::print("{}", fmt::join({1, 2, 3}, ", ")); + // Output: "1, 2, 3" + \endrst + */ +template +arg_join>, char> join( + std::initializer_list list, string_view sep) { + return join(std::begin(list), std::end(list), sep); +} + +template +arg_join>, wchar_t> join( + std::initializer_list list, wstring_view sep) { + return join(std::begin(list), std::end(list), sep); +} + FMT_END_NAMESPACE #endif // FMT_RANGES_H_ diff --git a/test/ranges-test.cc b/test/ranges-test.cc index 265f9acd..e47f8c2f 100644 --- a/test/ranges-test.cc +++ b/test/ranges-test.cc @@ -10,6 +10,7 @@ // {fmt} support for ranges, containers and types tuple interface. #include "fmt/ranges.h" + #include "gtest.h" // Check if 'if constexpr' is supported. @@ -68,6 +69,12 @@ TEST(RangesTest, JoinTuple) { EXPECT_EQ("4.0", fmt::format("{}", fmt::join(t4, "/"))); } +TEST(RangesTest, JoinInitializerList) { + EXPECT_EQ("1, 2, 3", fmt::format("{}", fmt::join({1, 2, 3}, ", "))); + EXPECT_EQ("fmt rocks !", + fmt::format("{}", fmt::join({"fmt", "rocks", "!"}, " "))); +} + struct my_struct { int32_t i; std::string str; // can throw