13#include "webcface/common/webcface-config.h"
42 if (
static_cast<int>(a) &
static_cast<int>(ValType::vector_)) {
43 return std::string(
"vector<") +
45 static_cast<int>(a) ^
static_cast<int>(ValType::vector_))) +
51 case ValType::string_:
72template <
typename T,
typename U = TraitOkType>
98 std::variant<double, std::int64_t> as_val;
101 enum ValVariant { DOUBLEV = 0, INT64V = 1 };
103 void initStr()
const;
104 void initWStr()
const;
141 template <
typename Bool>
155 template <
typename Bool>
156 auto operator=(Bool v) ->
165 template <
typename T,
typename std::enable_if_t<!std::is_same_v<T,
bool> &&
166 std::is_
integral_v<T>,
167 std::
nullptr_t> =
nullptr>
169 :
ValAdaptor(static_cast<std::int64_t>(value)) {}
170 template <
typename T,
typename std::enable_if_t<!std::is_same_v<T,
bool> &&
171 std::is_
integral_v<T>,
172 std::
nullptr_t> =
nullptr>
174 return *
this =
static_cast<std::int64_t
>(v);
177 template <
typename T,
typename std::enable_if_t<std::is_
floating_po
int_v<T>,
178 std::
nullptr_t> =
nullptr>
180 template <
typename T,
typename std::enable_if_t<std::is_
floating_po
int_v<T>,
181 std::
nullptr_t> =
nullptr>
183 return *
this =
static_cast<double>(v);
206 [[deprecated(
"(ver3.0〜) use asStringView() or asString() instead")]]
229 [[deprecated(
"(ver3.0〜) use asWStringView() or asWString() instead")]]
245 std::string_view asU8StringView()
const;
250 std::string
asString()
const {
return std::string(asStringView()); }
255 std::wstring
asWString()
const {
return std::wstring(asWStringView()); }
266 template <
typename T,
267 typename std::enable_if_t<std::is_convertible_v<StringView, T>,
268 std::nullptr_t> =
nullptr>
270 return asStringView();
281 template <
typename T,
typename std::enable_if_t<
282 !std::is_convertible_v<StringView, T> &&
283 std::is_convertible_v<WStringView, T>,
284 std::nullptr_t> =
nullptr>
286 return asWStringView();
296 template <
typename T,
typename std::enable_if_t<
297 !std::is_convertible_v<StringView, T> &&
298 !std::is_convertible_v<WStringView, T> &&
299 std::is_constructible_v<T, StringView>,
300 std::nullptr_t> =
nullptr>
301 explicit operator T()
const {
302 return T(asStringView());
312 template <
typename T,
typename std::enable_if_t<
313 !std::is_convertible_v<StringView, T> &&
314 !std::is_convertible_v<WStringView, T> &&
315 !std::is_constructible_v<T, StringView> &&
316 std::is_constructible_v<T, WStringView>,
317 std::nullptr_t> =
nullptr>
318 explicit operator T()
const {
319 return T(asWStringView());
326 double asDouble()
const;
336 long long asLLong()
const;
348 template <
typename T>
350 if constexpr (std::is_same_v<T, ValAdaptor>) {
355 return this->
operator T();
361 template <
typename T,
362 typename std::enable_if_t<std::is_convertible_v<double, T> &&
363 !std::is_same_v<T, bool>,
364 std::nullptr_t> =
nullptr>
366 if constexpr (std::is_floating_point_v<T>) {
367 return static_cast<T
>(asDouble());
368 }
else if constexpr (
sizeof(T) >
sizeof(
int)) {
369 return static_cast<T
>(asLLong());
371 return static_cast<T
>(asInt());
387 operator bool()
const {
return asBool(); }
392 template <
typename T,
typename std::enable_if_t<
393 std::is_constructible_v<ValAdaptor, T> &&
394 !std::is_same_v<ValAdaptor, T>,
395 std::nullptr_t> =
nullptr>
399 template <
typename T,
typename std::enable_if_t<
400 std::is_constructible_v<ValAdaptor, T> &&
401 !std::is_same_v<ValAdaptor, T>,
402 std::nullptr_t> =
nullptr>
408extern template ValAdaptor::ValAdaptor(
409 bool value,
typename traits::EnableIfBool<bool>::Type);
410extern template auto ValAdaptor::operator= <
bool>(
bool v) ->
411 typename traits::EnableIfBool<bool, ValAdaptor &>::Type;
415 typename std::enable_if_t<std::is_constructible_v<ValAdaptor, T> &&
416 !std::is_same_v<ValAdaptor, T>,
417 std::nullptr_t> =
nullptr>
422 typename std::enable_if_t<std::is_constructible_v<ValAdaptor, T> &&
423 !std::is_same_v<ValAdaptor, T>,
424 std::nullptr_t> =
nullptr>
u8stringとstringとwstringをshared_ptrで持ち共有する
Definition encoding.h:170
SharedString のpublicなコンストラクタインタフェース (入力専用)
Definition encoding.h:235
webcfaceで管理されている文字列を参照するstring_view
Definition encoding.h:71
数値、文字列などの値を相互変換するクラス
Definition val_adaptor.h:91
T as() const
数値として返す 明示的なキャストをする
Definition val_adaptor.h:349
bool operator==(const T &other) const
Definition val_adaptor.h:396
std::string asString() const
文字列として返す(コピー)
Definition val_adaptor.h:250
static const ValAdaptor & emptyVal()
std::string asStringRef() const
文字列として返す
Definition val_adaptor.h:207
StringView asStringView() const
null終端の文字列を返す
Definition val_adaptor.cc:91
std::wstring asWStringRef() const
文字列として返す (wstring)
Definition val_adaptor.h:230
bool operator!=(const ValAdaptor &other) const
Definition val_adaptor.h:390
bool operator!=(const T &other) const
Definition val_adaptor.h:403
ValAdaptor(T value)
Definition val_adaptor.h:168
ValType valType() const
Definition val_adaptor.h:186
ValAdaptor & operator=(T v)
Definition val_adaptor.h:173
std::wstring asWString() const
文字列として返す(コピー) (wstring)
Definition val_adaptor.h:255
std::ostream & operator<<(std::ostream &os, const Arg &arg)
Definition func_info.cc:99
bool operator==(const T &other, const InputRef &ref)
Definition text.h:608
std::string valTypeStr(ValType a)
型名を文字列で取得
Definition val_adaptor.h:41
ValType
引数や戻り値の型を表すenum
Definition val_adaptor.h:22
bool operator!=(const T &other, const InputRef &ref)
Definition text.h:614
U Type
Definition val_adaptor.h:76
Definition val_adaptor.h:73
#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