12#include "webcface/common/webcface-config.h"
41 if (
static_cast<int>(a) &
static_cast<int>(ValType::vector_)) {
42 return std::string(
"vector<") +
44 static_cast<int>(a) ^
static_cast<int>(ValType::vector_))) +
50 case ValType::string_:
88 std::variant<double, std::int64_t> as_val;
91 enum ValVariant { DOUBLEV = 0, INT64V = 1 };
94 void initWStr()
const;
126 template <
typename Bool,
typename std::enable_if_t<
127 std::is_same_v<Bool, bool>,
bool> =
true>
137 template <
typename Bool>
138 auto operator=(Bool v)
139 -> std::enable_if_t<std::is_same_v<Bool, bool>,
ValAdaptor &>;
147 template <
typename T,
typename std::enable_if_t<!std::is_same_v<T,
bool> &&
148 std::is_
integral_v<T>,
149 std::
nullptr_t> =
nullptr>
151 :
ValAdaptor(static_cast<std::int64_t>(value)) {}
152 template <
typename T,
typename std::enable_if_t<!std::is_same_v<T,
bool> &&
153 std::is_
integral_v<T>,
154 std::
nullptr_t> =
nullptr>
156 return *
this =
static_cast<std::int64_t
>(v);
159 template <
typename T,
typename std::enable_if_t<std::is_
floating_po
int_v<T>,
160 std::
nullptr_t> =
nullptr>
162 template <
typename T,
typename std::enable_if_t<std::is_
floating_po
int_v<T>,
163 std::
nullptr_t> =
nullptr>
165 return *
this =
static_cast<double>(v);
188 [[deprecated(
"(ver2.10〜) use asStringView() or asString() instead")]]
211 [[deprecated(
"(ver2.10〜) use asWStringView() or asWString() instead")]]
227 std::string_view asU8StringView()
const;
232 std::string
asString()
const {
return std::string(asStringView()); }
237 std::wstring
asWString()
const {
return std::wstring(asWStringView()); }
248 template <
typename T,
249 typename std::enable_if_t<std::is_convertible_v<StringView, T>,
250 std::nullptr_t> =
nullptr>
252 return asStringView();
263 template <
typename T,
typename std::enable_if_t<
264 !std::is_convertible_v<StringView, T> &&
265 std::is_convertible_v<WStringView, T>,
266 std::nullptr_t> =
nullptr>
268 return asWStringView();
278 template <
typename T,
typename std::enable_if_t<
279 !std::is_convertible_v<StringView, T> &&
280 !std::is_convertible_v<WStringView, T> &&
281 std::is_constructible_v<T, StringView>,
282 std::nullptr_t> =
nullptr>
283 explicit operator T()
const {
284 return T(asStringView());
294 template <
typename T,
typename std::enable_if_t<
295 !std::is_convertible_v<StringView, T> &&
296 !std::is_convertible_v<WStringView, T> &&
297 !std::is_constructible_v<T, StringView> &&
298 std::is_constructible_v<T, WStringView>,
299 std::nullptr_t> =
nullptr>
300 explicit operator T()
const {
301 return T(asWStringView());
308 double asDouble()
const;
318 long long asLLong()
const;
330 template <
typename T>
332 if constexpr (std::is_same_v<T, ValAdaptor>) {
337 return this->
operator T();
343 template <
typename T,
344 typename std::enable_if_t<std::is_convertible_v<double, T> &&
345 !std::is_same_v<T, bool>,
346 std::nullptr_t> =
nullptr>
348 if constexpr (std::is_floating_point_v<T>) {
349 return static_cast<T
>(asDouble());
350 }
else if constexpr (
sizeof(T) >
sizeof(
int)) {
351 return static_cast<T
>(asLLong());
353 return static_cast<T
>(asInt());
369 operator bool()
const {
return asBool(); }
374 template <
typename T,
typename std::enable_if_t<
375 std::is_constructible_v<ValAdaptor, T> &&
376 !std::is_same_v<ValAdaptor, T>,
377 std::nullptr_t> =
nullptr>
381 template <
typename T,
typename std::enable_if_t<
382 std::is_constructible_v<ValAdaptor, T> &&
383 !std::is_same_v<ValAdaptor, T>,
384 std::nullptr_t> =
nullptr>
390extern template ValAdaptor::ValAdaptor(
bool value);
391extern template ValAdaptor &ValAdaptor::operator= <
bool>(
bool v);
395 typename std::enable_if_t<std::is_constructible_v<ValAdaptor, T> &&
396 !std::is_same_v<ValAdaptor, T>,
397 std::nullptr_t> =
nullptr>
402 typename std::enable_if_t<std::is_constructible_v<ValAdaptor, T> &&
403 !std::is_same_v<ValAdaptor, T>,
404 std::nullptr_t> =
nullptr>
u8stringとstringとwstringをshared_ptrで持ち共有する
Definition encoding.h:159
SharedString のpublicなコンストラクタインタフェース (入力専用)
Definition encoding.h:215
webcfaceで管理されている文字列を参照するstring_view
Definition encoding.h:60
数値、文字列などの値を相互変換するクラス
Definition val_adaptor.h:81
T as() const
数値として返す 明示的なキャストをする
Definition val_adaptor.h:331
bool operator==(const T &other) const
Definition val_adaptor.h:378
std::string asString() const
文字列として返す(コピー)
Definition val_adaptor.h:232
static const ValAdaptor & emptyVal()
std::string asStringRef() const
文字列として返す
Definition val_adaptor.h:189
StringView asStringView() const
null終端の文字列を返す
Definition val_adaptor.cc:90
std::wstring asWStringRef() const
文字列として返す (wstring)
Definition val_adaptor.h:212
bool operator!=(const ValAdaptor &other) const
Definition val_adaptor.h:372
bool operator!=(const T &other) const
Definition val_adaptor.h:385
ValAdaptor(T value)
Definition val_adaptor.h:150
ValType valType() const
Definition val_adaptor.h:168
ValAdaptor & operator=(T v)
Definition val_adaptor.h:155
std::wstring asWString() const
文字列として返す(コピー) (wstring)
Definition val_adaptor.h:237
std::ostream & operator<<(std::ostream &os, const Arg &arg)
Definition func_info.cc:98
bool operator==(const T &other, const InputRef &ref)
Definition text.h:638
std::string valTypeStr(ValType a)
型名を文字列で取得
Definition val_adaptor.h:40
ValType
引数や戻り値の型を表すenum
Definition val_adaptor.h:21
bool operator!=(const T &other, const InputRef &ref)
Definition text.h:644
#define WEBCFACE_DLL
Definition webcface-config.h:69
#define WEBCFACE_NS_END
Definition webcface-config.h:113
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:112