7#include "webcface/common/webcface-config.h"
18 mutable std::vector<ValAdaptor> vec;
31 typename std::enable_if_t<
32 !std::is_same_v<ValAdaptor, T> &&
33 !std::is_same_v<ValAdaptorVector, T> &&
34 !std::is_constructible_v<StringInitializer, T> &&
35 std::is_constructible_v<ValAdaptor, T>,
36 std::nullptr_t> =
nullptr>
40 typename std::enable_if_t<
41 !std::is_same_v<ValAdaptor, T> &&
42 !std::is_same_v<ValAdaptorVector, T> &&
43 !std::is_constructible_v<StringInitializer, T> &&
44 std::is_constructible_v<ValAdaptor, T>,
45 std::nullptr_t> =
nullptr>
47 return *
this =
ValAdaptor(std::forward<T>(val));
52 typename std::enable_if_t<
53 !std::is_same_v<ValAdaptor, R> &&
54 !std::is_same_v<ValAdaptorVector, R> &&
55 !std::is_constructible_v<StringInitializer, R> &&
56 !std::is_constructible_v<ValAdaptor, R> &&
57 std::is_constructible_v<
58 ValAdaptor,
decltype(*std::begin(std::declval<R>()))> &&
60 decltype(*std::end(std::declval<R>()))>,
61 std::nullptr_t> =
nullptr>
63 : vec(std::begin(range), std::end(range)) {}
66 typename std::enable_if_t<
67 !std::is_same_v<ValAdaptor, R> &&
68 !std::is_same_v<ValAdaptorVector, R> &&
69 !std::is_constructible_v<StringInitializer, R> &&
70 !std::is_constructible_v<ValAdaptor, R> &&
71 std::is_constructible_v<
72 ValAdaptor,
decltype(*std::begin(std::declval<R>()))> &&
74 decltype(*std::end(std::declval<R>()))>,
75 std::nullptr_t> =
nullptr>
78 std::vector<ValAdaptor>(std::begin(range), std::end(range));
80 template <
typename T, std::size_t N,
81 typename std::enable_if_t<
82 !std::is_same_v<T, char> && !std::is_same_v<T, wchar_t> &&
83 std::is_convertible_v<T, ValAdaptor>,
84 std::nullptr_t> =
nullptr>
86 : vec(std::begin(range), std::end(range)) {}
87 template <
typename T, std::size_t N,
88 typename std::enable_if_t<
89 !std::is_same_v<T, char> && !std::is_same_v<T, wchar_t> &&
90 std::is_convertible_v<T, ValAdaptor>,
91 std::nullptr_t> =
nullptr>
94 std::vector<ValAdaptor>(std::begin(range), std::end(range));
118 template <
typename T,
119 typename std::enable_if_t<std::is_convertible_v<ValAdaptor, T>,
120 std::nullptr_t> =
nullptr>
122 return get().as<T>();
124 template <
typename T,
125 typename std::enable_if_t<!std::is_convertible_v<ValAdaptor, T>,
126 std::nullptr_t> =
nullptr,
129 typename =
decltype(std::declval<ValAdaptor>().operator T())>
132 typename std::enable_if_t<std::is_constructible_v<T, ValAdaptor>,
133 std::nullptr_t> =
nullptr>
135 explicit operator T()
const {
136 return get().as<T>();
138 template <
typename T,
139 typename = std::void_t<
140 decltype(std::declval<ValAdaptor>().operator T())>>
142 return std::vector<T>(vec.begin(), vec.end());
144 template <
typename T,
145 typename = std::void_t<
146 decltype(std::declval<ValAdaptor>().operator T())>>
147 operator std::vector<T>()
const {
148 return asVector<T>();
150 template <
typename T, std::size_t N,
151 typename = std::void_t<
152 decltype(std::declval<ValAdaptor>().operator T())>>
154 if (N != vec.size()) {
156 "array of size " + std::to_string(vec.size()) +
157 " cannot be converted to array<" + std::to_string(N) +
">");
160 for (std::size_t i = 0; i < N; i++) {
161 a[i] = vec[i].as<T>();
165 template <
typename T, std::size_t N,
166 typename = std::void_t<
167 decltype(std::declval<ValAdaptor>().operator T())>>
168 operator std::array<T, N>()
const {
169 return asArray<T, N>();
172 template <
typename T>
174 if constexpr (std::is_same_v<T, ValAdaptorVector>) {
177 return this->
operator T();
182 const ValAdaptor &at(std::size_t index)
const;
190 std::size_t size()
const;
192 [[deprecated(
"(ver3.0〜) use asStringView() or asString() instead")]]
196 [[deprecated(
"(ver3.0〜) use asWStringView() or asWString() instead")]]
212 return !(*
this == other);
215 template <
typename T,
typename std::enable_if_t<
216 std::is_constructible_v<ValAdaptorVector, T> &&
217 !std::is_same_v<ValAdaptorVector, T>,
218 std::nullptr_t> =
nullptr>
222 template <
typename T,
typename std::enable_if_t<
223 std::is_constructible_v<ValAdaptorVector, T> &&
224 !std::is_same_v<ValAdaptorVector, T>,
225 std::nullptr_t> =
nullptr>
231template <
typename T,
typename V,
232 typename std::enable_if_t<
233 std::is_same_v<V, ValAdaptorVector> &&
234 std::is_constructible_v<ValAdaptorVector, T> &&
235 !std::is_same_v<ValAdaptorVector, T>,
236 std::nullptr_t> =
nullptr>
240template <
typename T,
typename V,
241 typename std::enable_if_t<
242 std::is_same_v<V, ValAdaptorVector> &&
243 std::is_constructible_v<ValAdaptorVector, T> &&
244 !std::is_same_v<ValAdaptorVector, T>,
245 std::nullptr_t> =
nullptr>
256template <
int n = 0,
typename T>
257void argToTuple(
const std::vector<ValAdaptorVector> &args, T &tuple) {
258 constexpr int tuple_size = std::tuple_size<T>::value;
259 if constexpr (n < tuple_size) {
260 using Type =
typename std::tuple_element<n, T>::type;
261 std::get<n>(tuple) = args[n].as<Type>();
262 argToTuple<n + 1>(args, tuple);
267[[deprecated(
"Unknown type T is passed to webcface::valTypeOf(). "
268 "This should not happen. Maybe there's a bug in WebCFace...")]]
279 if constexpr (std::is_void_v<T>) {
280 return ValType::none_;
281 }
else if constexpr (!std::is_constructible_v<ValAdaptor, T> &&
282 std::is_constructible_v<ValAdaptorVector, T>) {
284 static_cast<int>(ValType::vector_) +
286 valTypeOf<
decltype(*std::declval<T>().begin())>()));
287 }
else if constexpr (std::is_same_v<bool, std::decay_t<T>>) {
288 return ValType::bool_;
289 }
else if constexpr (std::is_integral_v<std::decay_t<T>>) {
290 return ValType::int_;
291 }
else if constexpr (std::is_floating_point_v<std::decay_t<T>>) {
292 return ValType::float_;
293 }
else if constexpr (std::is_constructible_v<StringInitializer, T>) {
294 return ValType::string_;
296 warningOnUnknownType<T>();
297 return ValType::none_;
SharedString のpublicなコンストラクタインタフェース (入力専用)
Definition encoding.h:235
webcfaceで管理されている文字列を参照するstring_view
Definition encoding.h:71
ValAdaptorのVector.
Definition val_adaptor_vec.h:17
std::string_view asU8StringView() const
Definition val_adaptor_vec.h:202
T as() const
Definition val_adaptor_vec.h:173
bool operator==(const T &other) const
Definition val_adaptor_vec.h:219
std::string asString() const
Definition val_adaptor_vec.h:203
ValAdaptorVector & operator=(T &&val)
Definition val_adaptor_vec.h:46
std::string asStringRef() const
Definition val_adaptor_vec.h:193
const ValAdaptor & operator[](std::size_t index) const
Definition val_adaptor_vec.h:181
ValAdaptorVector & operator=(const T(&range)[N])
Definition val_adaptor_vec.h:92
StringView asStringView() const
Definition val_adaptor_vec.h:200
std::wstring asWStringRef() const
Definition val_adaptor_vec.h:197
const ValAdaptor * cbegin() const
Definition val_adaptor_vec.h:187
ValAdaptorVector(const T(&range)[N])
Definition val_adaptor_vec.h:85
const ValAdaptor * begin() const
Definition val_adaptor_vec.h:185
long long asLLong() const
Definition val_adaptor_vec.h:207
bool operator!=(const T &other) const
Definition val_adaptor_vec.h:226
bool operator!=(const ValAdaptorVector &other) const
Definition val_adaptor_vec.h:211
bool asBool() const
Definition val_adaptor_vec.h:208
int asInt() const
Definition val_adaptor_vec.h:206
const ValAdaptor * end() const
Definition val_adaptor_vec.h:186
ValAdaptorVector(const R &range)
Definition val_adaptor_vec.h:62
double asDouble() const
Definition val_adaptor_vec.h:205
const ValAdaptor * cend() const
Definition val_adaptor_vec.h:188
ValAdaptorVector(T &&val)
Definition val_adaptor_vec.h:37
std::wstring asWString() const
Definition val_adaptor_vec.h:204
std::array< T, N > asArray() const
Definition val_adaptor_vec.h:153
std::vector< T > asVector() const
Definition val_adaptor_vec.h:141
WStringView asWStringView() const
Definition val_adaptor_vec.h:201
数値、文字列などの値を相互変換するクラス
Definition val_adaptor.h:91
bool operator==(const T &other, const InputRef &ref)
Definition text.h:608
const auto & get(const AxisAngle &aa)
Definition transform.h:227
void argToTuple(const std::vector< ValAdaptorVector > &args, T &tuple)
ValAdaptorのリストから任意の型のタプルに変換する
Definition val_adaptor_vec.h:257
void warningOnUnknownType()
Definition val_adaptor_vec.h:269
ValType
引数や戻り値の型を表すenum
Definition val_adaptor.h:22
ValType valTypeOf()
TのValTypeを得る
Definition val_adaptor_vec.h:278
bool operator!=(const T &other, const InputRef &ref)
Definition text.h:614
ValAdaptorの変換エラー
Definition exception.h:35
#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