12#include "webcface/common/webcface-config.h"
35 if constexpr (std::is_void_v<T>) {
36 return ValType::none_;
37 }
else if constexpr (std::is_same_v<bool, T>) {
38 return ValType::bool_;
39 }
else if constexpr (std::is_integral_v<T>) {
41 }
else if constexpr (std::is_floating_point_v<T>) {
42 return ValType::float_;
44 return ValType::string_;
56 case ValType::string_:
94 std::variant<double, std::int64_t> as_val;
97 enum ValVariant { DOUBLEV = 0, INT64V = 1 };
100 void initWStr()
const;
132 template <
typename Bool,
typename std::enable_if_t<
133 std::is_same_v<Bool, bool>,
bool> =
true>
143 template <
typename Bool>
144 auto operator=(Bool v)
145 -> std::enable_if_t<std::is_same_v<Bool, bool>,
ValAdaptor &>;
153 template <
typename T,
typename std::enable_if_t<!std::is_same_v<T,
bool> &&
154 std::is_
integral_v<T>,
155 std::
nullptr_t> =
nullptr>
157 :
ValAdaptor(static_cast<std::int64_t>(value)) {}
158 template <
typename T,
typename std::enable_if_t<!std::is_same_v<T,
bool> &&
159 std::is_
integral_v<T>,
160 std::
nullptr_t> =
nullptr>
162 return *
this =
static_cast<std::int64_t
>(v);
165 template <
typename T,
typename std::enable_if_t<std::is_
floating_po
int_v<T>,
166 std::
nullptr_t> =
nullptr>
168 template <
typename T,
typename std::enable_if_t<std::is_
floating_po
int_v<T>,
169 std::
nullptr_t> =
nullptr>
171 return *
this =
static_cast<double>(v);
192 [[deprecated(
"(ver2.10〜) use asStringView() or asString() instead")]]
215 [[deprecated(
"(ver2.10〜) use asWStringView() or asWString() instead")]]
231 std::string_view asU8StringView()
const;
236 std::string
asString()
const {
return std::string(asStringView()); }
241 std::wstring
asWString()
const {
return std::wstring(asWStringView()); }
252 template <
typename T,
253 typename std::enable_if_t<std::is_convertible_v<StringView, T>,
254 std::nullptr_t> =
nullptr>
256 return asStringView();
267 template <
typename T,
typename std::enable_if_t<
268 !std::is_convertible_v<StringView, T> &&
269 std::is_convertible_v<WStringView, T>,
270 std::nullptr_t> =
nullptr>
272 return asWStringView();
282 template <
typename T,
typename std::enable_if_t<
283 !std::is_convertible_v<StringView, T> &&
284 !std::is_convertible_v<WStringView, T> &&
285 std::is_constructible_v<T, StringView>,
286 std::nullptr_t> =
nullptr>
287 explicit operator T()
const {
288 return T(asStringView());
298 template <
typename T,
typename std::enable_if_t<
299 !std::is_convertible_v<StringView, T> &&
300 !std::is_convertible_v<WStringView, T> &&
301 !std::is_constructible_v<T, StringView> &&
302 std::is_constructible_v<T, WStringView>,
303 std::nullptr_t> =
nullptr>
304 explicit operator T()
const {
305 return T(asWStringView());
312 double asDouble()
const;
322 long long asLLong()
const;
334 template <
typename T>
338 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>
422template <
int n = 0,
typename T>
423void argToTuple(
const std::vector<ValAdaptor> &args, T &tuple) {
424 constexpr int tuple_size = std::tuple_size<T>::value;
425 if constexpr (n < tuple_size) {
426 using Type =
typename std::tuple_element<n, T>::type;
427 std::get<n>(tuple) = args[n].as<Type>();
428 argToTuple<n + 1>(args, tuple);
432namespace [[deprecated(
"symbols in webcface::encoding namespace are "
433 "now directly in webcface namespace")]] encoding {
437 return webcface::valTypeOf<T>();
444template <
int n = 0,
typename T>
445void argToTuple(
const std::vector<webcface::ValAdaptor> &args, T &tuple) {
446 webcface::argToTuple<n>(args, tuple);
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:87
T as() const
数値として返す 明示的なキャストをする
Definition val_adaptor.h:335
bool operator==(const T &other) const
Definition val_adaptor.h:378
std::string asString() const
文字列として返す(コピー)
Definition val_adaptor.h:236
std::string asStringRef() const
文字列として返す
Definition val_adaptor.h:193
StringView asStringView() const
null終端の文字列を返す
Definition val_adaptor.cc:85
std::wstring asWStringRef() const
文字列として返す (wstring)
Definition val_adaptor.h:216
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:156
ValType valType() const
Definition val_adaptor.h:174
ValAdaptor & operator=(T v)
Definition val_adaptor.h:161
std::wstring asWString() const
文字列として返す(コピー) (wstring)
Definition val_adaptor.h:241
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:641
void argToTuple(const std::vector< ValAdaptor > &args, T &tuple)
ValAdaptorのリストから任意の型のタプルに変換する
Definition val_adaptor.h:423
std::string valTypeStr(ValType a)
型名を文字列で取得
Definition val_adaptor.h:52
ValType
引数や戻り値の型を表すenum
Definition val_adaptor.h:21
ValType valTypeOf()
TのValTypeを得る
Definition val_adaptor.h:34
bool operator!=(const T &other, const InputRef &ref)
Definition text.h:647
#define WEBCFACE_DLL
Definition webcface-config.h:69
#define WEBCFACE_NS_END
Definition webcface-config.h:118
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:117