16template <
typename BadArg>
18template <
typename BadArg>
26template <
typename Arg,
typename =
void>
32template <
typename Arg>
34 Arg, std::void_t<decltype(std::declval<ValAdaptorVector>().operator Arg())>>
37template <
typename... Args>
41 struct ArgTypesCheckResult {
45template <
typename FirstArg,
typename... OtherArgs>
52template <
typename... Args>
56template <
typename BadArg>
61template <
typename Ret>
63 std::disjunction_v<std::is_void<Ret>,
64 std::is_constructible<ValAdaptorVector, Ret>>,
77template <
typename Ret,
typename... Args>
81 static constexpr bool return_void = std::is_void_v<Ret>;
86 return std::vector<Arg>{
Arg{valTypeOf<Args>()}...};
89template <
typename Ret,
typename T,
typename... Args>
92template <
typename Ret,
typename T,
typename... Args>
95template <
typename Ret,
typename... Args>
101 std::declval<std::decay_t<T>>()))>;
119 using Field::lastName;
120 using Field::lastNameW;
149 return child(std::move(field));
158 return child(std::to_string(index));
173 const Func &setImpl(
ValType return_type, std::vector<Arg> &&args,
174 std::function<FuncType> &&func_impl)
const;
179 const Func &setImpl(
ValType return_type, std::nullopt_t,
180 std::function<FuncType> &&func_impl)
const;
182 setImpl(
const std::shared_ptr<internal::FuncInfo> &func_info)
const;
188 template <
typename F1>
194 }
catch (
const std::exception &e) {
196 }
catch (
const std::string &e) {
198 }
catch (
const char *e) {
200 }
catch (
const std::wstring &e) {
202 }
catch (
const wchar_t *e) {
205 error =
"unknown exception";
213 template <
typename F1>
215 catchAll([&] { handle.
respond(f_run()); }, handle);
232 template <
typename T,
241 [func = std::move(func)](
const CallHandle &handle) {
250 std::apply(func, args_tuple);
253 auto ret = std::apply(func, args_tuple);
274 template <
typename T,
283 [func_p = std::make_shared<T>(std::move(func))](
286 std::thread([func_p, handle]() {
294 std::apply(*func_p, args_tuple);
297 auto ret = std::apply(*func_p, args_tuple);
316 template <
typename T>
317 [[deprecated(
"use set() or setAsync()")]]
319 this->set(std::move(func));
342 template <
typename T,
343 typename std::enable_if_t<
344 std::is_same_v<std::invoke_result_t<T, CallHandle>,
void>,
345 std::nullptr_t> =
nullptr>
348 auto args_size = args.size();
349 return setImpl(return_type, std::move(args),
350 [args_size, callback = std::move(callback)](
353 catchAll([&] { callback(handle); }, handle);
374 template <
typename T,
375 typename std::enable_if_t<
376 std::is_same_v<std::invoke_result_t<T, CallHandle>,
void>,
377 std::nullptr_t> =
nullptr>
380 auto args_size = args.size();
382 return_type, std::move(args),
385 std::move(callback))](
const CallHandle &handle) {
387 std::thread([callback, handle] {
388 catchAll([&] { callback->operator()(handle); }, handle);
409 template <
typename T,
410 typename std::enable_if_t<
411 std::is_same_v<std::invoke_result_t<T, CallHandle>,
void>,
412 std::nullptr_t> =
nullptr>
414 return setImpl(ValType::none_, std::nullopt,
415 [base = *
this, callback = std::move(callback)](
418 catchAll([&] { callback(handle); }, handle);
438 template <
typename T,
439 typename std::enable_if_t<
440 std::is_same_v<std::invoke_result_t<T, CallHandle>,
void>,
441 std::nullptr_t> =
nullptr>
444 ValType::none_, std::nullopt,
447 std::move(callback))](
const CallHandle &handle) {
449 std::thread([callback, handle] {
450 catchAll([&] { callback->operator()(handle); }, handle);
460 const Func &free()
const;
479 template <
typename... Args>
484 Promise runAsync(std::vector<ValAdaptorVector> args_vec)
const;
487 std::vector<ValAdaptorVector>(args_vec.begin(), args_vec.end()));
515 const Func &setIndex(
int index)
const;
528 std::vector<Arg> args()
const;
545 const Func &setArgs(
const std::vector<Arg> &args)
const;
555 const Func &setReturnType(
ValType return_type)
const;
561 template <
typename T,
typename std::enable_if_t<std::is_same_v<T, Func>,
562 std::
nullptr_t> =
nullptr>
564 return static_cast<Field>(*this) ==
static_cast<Field>(other);
566 template <
typename T,
typename std::enable_if_t<std::is_same_v<T, Func>,
567 std::
nullptr_t> =
nullptr>
569 return static_cast<Field>(*this) !=
static_cast<Field>(other);
575 std::vector<Arg> args_{};
600 ValType return_type = ValType::none_) {
601 this->args_.resize(args_num);
602 this->return_type_ = return_type;
624 this->return_type_ = type;
638 std::optional<FuncCallHandle> fetchCall()
const;
引数の情報を表す。
Definition arg.h:31
呼び出された関数の引数の取得と戻り値のセットをするインタフェース
Definition func_result.h:275
void reject(const ValAdaptor &message) const
Definition func_result.cc:92
void respond(const ValAdaptorVector &value) const
Definition func_result.cc:74
bool assertArgsNum(std::size_t expected) const
引数の数をチェックする
Definition func_result.cc:111
const std::vector< ValAdaptorVector > & args() const
関数の引数を取得する
Definition func_result.cc:323
FuncListener(const Field &base, const SharedString &field)
Definition func.h:580
FuncListener & setReturnType(ValType type)
戻り値の型をセットする
Definition func.h:623
FuncListener & setArgs(const std::vector< Arg > &args)
引数の情報をセットする
Definition func.h:613
FuncListener & listen(std::size_t args_num, ValType return_type=ValType::none_)
関数呼び出しの待受を開始する
Definition func.h:599
関数1つを表すクラス
Definition func.h:109
bool operator==(const T &other) const
Funcの参照先を比較
Definition func.h:563
const Func & setAsync(T func) const
非同期に実行される関数をセットする
Definition func.h:279
const Func & setAsync(T callback) const
引数にFuncCallHandleを取り非同期に実行される関数を登録する
Definition func.h:442
Promise runAsync(std::vector< ValAdaptor > args_vec) const
Definition func.h:485
const Func & setAsync(std::vector< Arg > args, ValType return_type, T callback) const
引数にFuncCallHandleを取り非同期に実行される関数を登録する
Definition func.h:378
Func operator[](StringInitializer field) const
Definition func.h:148
Func child(int index) const
Definition func.h:138
void(CallHandle) FuncType
Definition func.h:166
const Arg args(std::size_t i) const
Definition func.h:530
const Func & operator=(T func) const
関数をセットする
Definition func.h:318
static void catchAll(F1 &&f_run, const CallHandle &handle)
Definition func.h:189
Func child(StringInitializer field) const
「(thisの名前).(追加の名前)」を新しい名前とするField
Definition func.h:130
bool operator!=(const T &other) const
Definition func.h:568
const Func & set(std::vector< Arg > args, ValType return_type, T callback) const
引数にCallHandleを取る関数を登録する
Definition func.h:346
Func(const Field &base, const SharedString &field)
Definition func.h:116
static void tryRun(F1 &&f_run, const CallHandle &handle)
Definition func.h:214
const Func & set(T func) const
関数をセットする
Definition func.h:237
const Func & set(T callback) const
引数にCallHandleを取る関数を登録する
Definition func.h:413
Func parent() const
nameの最後のピリオドの前までを新しい名前とするField
Definition func.h:164
Func operator[](int index) const
Definition func.h:157
Promise runAsync(Args... args) const
関数を実行する (非同期)
Definition func.h:480
非同期で実行した関数の実行結果を取得するインタフェース。
Definition func_result.h:30
u8stringとstringとwstringをshared_ptrで持ち共有する
Definition encoding.h:170
SharedString のpublicなコンストラクタインタフェース (入力専用)
Definition encoding.h:235
Definition component_canvas2d.h:148
Viewを構築するときに使う一時的なViewComponent.
Definition component_view.h:292
ValAdaptorのVector.
Definition val_adaptor_vec.h:17
数値、文字列などの値を相互変換するクラス
Definition val_adaptor.h:81
std::nullptr_t TraitOkType
Definition trait.h:11
std::conditional_t< std::disjunction_v< std::is_void< Ret >, std::is_constructible< ValAdaptorVector, Ret > >, FuncReturnTypeCheckOkTrait, This_return_type_is_not_supported_by_WebCFace_Func< Ret > > FuncReturnTypeTrait
Definition func.h:66
constexpr std::nullptr_t TraitOk
Definition trait.h:12
typename FuncArgTypesIterationTrait< Args... >::ArgTypesCheckResult FuncArgTypesTrait
Definition func.h:54
constexpr auto getInvokeSignature(T &&) -> decltype(&T::operator())
Definition func_trait.h:13
void argToTuple(const std::vector< ValAdaptorVector > &args, T &tuple)
ValAdaptorのリストから任意の型のタプルに変換する
Definition val_adaptor_vec.h:257
ValType
引数や戻り値の型を表すenum
Definition val_adaptor.h:21
ValType valTypeOf()
TのValTypeを得る
Definition val_adaptor_vec.h:278
ClientDataの参照とメンバ名とデータ名を持つクラス
Definition field.h:68
Field parent() const
nameの最後のピリオドの前までを新しい名前とするField
Definition field.cc:39
Field child(const SharedString &field) const
Definition field.cc:48
typename std::conditional_t< IsConstructibleArg< std::decay_t< FirstArg > >::value, FuncArgTypesIterationTrait< OtherArgs... >, FuncArgTypesIterationFailureTrait< FirstArg > >::ArgTypesCheckResult ArgTypesCheckResult
Definition func.h:50
TraitOkType ArgTypesCheckOk
Definition func.h:42
TraitOkType FuncReturnTypeCheckOk
Definition func.h:59
static std::vector< Arg > argsInfo()
Definition func.h:85
FuncReturnTypeTrait< Ret > ReturnTypeTrait
Definition func.h:79
static bool assertArgsNum(const CallHandle &handle)
Definition func.h:82
FuncArgTypesTrait< Args... > ArgTypesTrait
Definition func.h:80
Definition func_trait.h:21
#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
#define WEBCFACE_CALL_FP
Definition webcface-config.h:107