General Utility Library for C++17 25.4.1
cat.h
Go to the documentation of this file.
1
24#ifndef GUL17_CAT_H_
25#define GUL17_CAT_H_
26
27#include <string_view>
28#include <string>
29#include <type_traits>
30
31#include "gul17/internal.h"
32
33namespace gul17 {
34
49{
50public:
51 ConvertingStringView(const std::string &str) : sv_(str) {}
52 ConvertingStringView(std::string_view sv) : sv_(sv) {}
53 ConvertingStringView(const char *str) : sv_(str) {}
54
55 ConvertingStringView(char c) : str_(1, c), sv_(str_) {}
56 ConvertingStringView(int a) : str_(std::to_string(a)), sv_(str_) {}
57 ConvertingStringView(unsigned int a) : str_(std::to_string(a)), sv_(str_) {}
58 ConvertingStringView(long a) : str_(std::to_string(a)), sv_(str_) {}
59 ConvertingStringView(unsigned long a) : str_(std::to_string(a)), sv_(str_) {}
60 ConvertingStringView(long long a) : str_(std::to_string(a)), sv_(str_) {}
61 ConvertingStringView(unsigned long long a) : str_(std::to_string(a)), sv_(str_) {}
62 ConvertingStringView(float a) : str_(std::to_string(a)), sv_(str_) {}
63 ConvertingStringView(double a) : str_(std::to_string(a)), sv_(str_) {}
64
69 const char *data() const noexcept { return sv_.data(); }
70
72 std::size_t length() const noexcept { return sv_.length(); }
73
75 std::size_t size() const noexcept { return sv_.size(); }
76
78 explicit operator std::string() const { return std::string(sv_); };
79
80private:
81 std::string str_;
82 std::string_view sv_;
83};
84
97inline std::string cat() { return std::string(); }
98
100inline std::string cat(const ConvertingStringView& s) { return std::string(s); }
101
103GUL_EXPORT
104std::string cat(const ConvertingStringView& s1, const ConvertingStringView& s2);
105
107GUL_EXPORT
108std::string cat(const ConvertingStringView& s1, const ConvertingStringView& s2,
109 const ConvertingStringView& s3);
110
112GUL_EXPORT
113std::string cat(std::initializer_list<ConvertingStringView> pieces);
114
116template <typename... Args, typename = std::enable_if_t<(sizeof...(Args) > 3)>>
117inline std::string cat(const Args&... args)
118{
119 return cat({ args... }); // NOLINT(cppcoreguidelines-pro-bounds-array-to-pointer-decay): Impossible to remove that warning
120}
121
123
124} // namespace gul17
125
126#endif
A string view that can automatically convert numbers into strings.
Definition cat.h:49
ConvertingStringView(int a)
Construct a ConvertingStringView from an integer.
Definition cat.h:56
ConvertingStringView(char c)
Construct a ConvertingStringView from a character.
Definition cat.h:55
ConvertingStringView(unsigned int a)
Construct a ConvertingStringView from an unsigned integer.
Definition cat.h:57
ConvertingStringView(const std::string &str)
Construct a ConvertingStringView from a std::string.
Definition cat.h:51
std::size_t length() const noexcept
Return the length of the string.
Definition cat.h:72
ConvertingStringView(const char *str)
Construct a ConvertingStringView from a const char *.
Definition cat.h:53
ConvertingStringView(long a)
Construct a ConvertingStringView from a long integer.
Definition cat.h:58
const char * data() const noexcept
Return a pointer to the internal character buffer.
Definition cat.h:69
ConvertingStringView(std::string_view sv)
Construct a ConvertingStringView from a std::string_view.
Definition cat.h:52
ConvertingStringView(float a)
Construct a ConvertingStringView from a float.
Definition cat.h:62
ConvertingStringView(double a)
Construct a ConvertingStringView from a double.
Definition cat.h:63
ConvertingStringView(unsigned long long a)
Construct a ConvertingStringView from an unsigned long long integer.
Definition cat.h:61
std::size_t size() const noexcept
Return the length of the string.
Definition cat.h:75
ConvertingStringView(unsigned long a)
Construct a ConvertingStringView from an unsigned long integer.
Definition cat.h:59
ConvertingStringView(long long a)
Construct a ConvertingStringView from a long long integer.
Definition cat.h:60
auto constexpr bit_set(unsigned bit) noexcept -> ReturnT
Set a bit in an integral type.
Definition bit_manip.h:121
std::string cat()
Efficiently concatenate an arbitrary number of strings and numbers.
Definition cat.h:97
Definition of macros used internally by GUL.
Namespace gul17 contains all functions and classes of the General Utility Library.
Definition doxygen.h:26