14 std::variant<std::string_view, QString>
str_;
16 explicit str(
char const *s) :
str_(
std::string_view(s)) {}
17 explicit str(
char const *s,
size_t n) :
str_(
std::string_view(s, n)) {}
18 explicit str(
char const *begin,
char const *end) :
str_(
std::string_view(begin, end - begin)) {}
19 explicit str(std::string_view sv) :
str_(sv) {}
20 explicit str(std::vector<char>
const &v) :
str_(
std::string_view(v.data(), v.size())) {}
21 explicit str(QString
const &s) :
str_(s) {}
22 explicit str(char16_t
const *begin, char16_t
const *end) :
str_(QString::fromUtf16(begin, end - begin)) {}
23 explicit str(QByteArray
const &ba) :
str_(
std::string_view(ba.data(), ba.size())) {}
26 return std::visit([](
auto &&arg) ->
bool {
27 using T = std::decay_t<decltype(arg)>;
28 if constexpr (std::is_same_v<T, std::string_view>) {
30 }
else if constexpr (std::is_same_v<T, QString>) {
40 explicit operator bool ()
const
46 return std::visit([](
auto &&arg) -> std::string {
47 using T = std::decay_t<decltype(arg)>;
48 if constexpr (std::is_same_v<T, std::string_view>) {
49 return std::string(arg);
50 }
else if constexpr (std::is_same_v<T, QString>) {
51 return arg.toStdString();
59 return std::visit([](
auto &&arg) -> std::string_view {
60 using T = std::decay_t<decltype(arg)>;
61 if constexpr (std::is_same_v<T, std::string_view>) {
63 }
else if constexpr (std::is_same_v<T, QString>) {
65 std::string s = arg.toStdString();
66 return std::string_view(s);
72 qDebug() <<
"Warning: Converting QString to std::string_view may lead to dangling reference. Consider using std::string instead.";
81 return std::visit([](
auto &&arg) -> std::vector<char> {
82 using T = std::decay_t<decltype(arg)>;
83 if constexpr (std::is_same_v<T, std::string_view>) {
84 return std::vector<char>(arg.begin(), arg.end());
85 }
else if constexpr (std::is_same_v<T, QString>) {
86 std::string s = arg.toStdString();
87 return std::vector<char>(s.begin(), s.end());
94 return std::visit([](
auto &&arg) -> QString {
95 using T = std::decay_t<decltype(arg)>;
96 if constexpr (std::is_same_v<T, std::string_view>) {
97 return QString::fromStdString(std::string(arg));
98 }
else if constexpr (std::is_same_v<T, QString>) {
106 return std::visit([](
auto &&arg) -> QByteArray {
107 using T = std::decay_t<decltype(arg)>;
108 if constexpr (std::is_same_v<T, std::string_view>) {
109 return QByteArray(arg.data(), arg.size());
110 }
else if constexpr (std::is_same_v<T, QString>) {
116 operator std::string()
const
120 operator std::string_view()
const
124 operator std::vector<char>()
const
128 operator QString()
const
136 operator QByteArray()
const
145 std::vector<std::string_view>
vec_;
147 strlist(std::vector<std::string_view>
const &vec)
153 vec_.reserve(vec.size());
154 for (
auto const &s : vec) {
155 vec_.emplace_back(s);
158 operator std::vector<std::string> ()
const
160 std::vector<std::string> out;
161 for (
auto const &s :
vec_) {
str(std::vector< char > const &v)
Definition: str.h:20
std::string std_string() const
Definition: str.h:44
str(char const *s, size_t n)
Definition: str.h:17
std::string_view std_string_view() const
Definition: str.h:57
QByteArray qbytearray() const
Definition: str.h:104
str(char const *s)
Definition: str.h:16
bool empty() const
Definition: str.h:24
str(QString const &s)
Definition: str.h:21
str(char16_t const *begin, char16_t const *end)
Definition: str.h:22
str(char const *begin, char const *end)
Definition: str.h:18
std::vector< char > std_vector_char() const
Definition: str.h:79
str(QByteArray const &ba)
Definition: str.h:23
str(std::string_view sv)
Definition: str.h:19
bool isEmpty() const
Definition: str.h:36
std::variant< std::string_view, QString > str_
Definition: str.h:14
QString qstring() const
Definition: str.h:92
strlist(std::vector< std::string_view > const &vec)
Definition: str.h:147
std::vector< std::string_view > vec_
Definition: str.h:145
strlist(std::vector< std::string > const &vec)
Definition: str.h:151
Definition: GitTypes.h:78