15template <
typename BadArg>
17template <
typename BadArg>
25template <
typename Arg,
typename =
void>
29template <
typename Arg>
31 std::void_t<decltype(std::declval<ValAdaptor>().operator Arg())>>
34template <
typename... Args>
38 struct ArgTypesCheckResult {
42template <
typename FirstArg,
typename... OtherArgs>
49template <
typename... Args>
53template <
typename BadArg>
58template <
typename Ret>
60 std::disjunction_v<std::is_void<Ret>,
61 std::is_constructible<ValAdaptor, Ret>>,
74template <
typename Ret,
typename... Args>
78 static constexpr bool return_void = std::is_void_v<Ret>;
83 return std::vector<Arg>{
Arg{valTypeOf<Args>()}...};
86template <
typename Ret,
typename T,
typename... Args>
89template <
typename Ret,
typename T,
typename... Args>
92template <
typename Ret,
typename... Args>
98 std::declval<std::decay_t<T>>()))>;
116 using Field::lastName;
145 return child(std::move(field));
154 return child(std::to_string(index));
169 const Func &setImpl(
ValType return_type, std::vector<Arg> &&args,
170 std::function<FuncType> &&func_impl)
const;
175 const Func &setImpl(
ValType return_type, std::nullopt_t,
176 std::function<FuncType> &&func_impl)
const;
178 setImpl(
const std::shared_ptr<internal::FuncInfo> &func_info)
const;
184 template <
typename F1>
190 }
catch (
const std::exception &e) {
192 }
catch (
const std::string &e) {
194 }
catch (
const char *e) {
196 }
catch (
const std::wstring &e) {
198 }
catch (
const wchar_t *e) {
201 error =
"unknown exception";
209 template <
typename F1>
211 catchAll([&] { handle.
respond(f_run()); }, handle);
228 template <
typename T,
237 [func = std::move(func)](
const CallHandle &handle) {
245 std::apply(func, args_tuple);
248 auto ret = std::apply(func, args_tuple);
269 template <
typename T,
278 [func_p = std::make_shared<T>(std::move(func))](
284 [func_p, handle](
auto args_tuple) {
289 std::apply(*func_p, args_tuple);
293 std::apply(*func_p, args_tuple);
299 std::move(args_tuple))
314 template <
typename T>
315 [[deprecated(
"use set() or setAsync()")]]
317 this->set(std::move(func));
340 template <
typename T,
341 typename std::enable_if_t<
342 std::is_same_v<std::invoke_result_t<T, CallHandle>,
void>,
343 std::nullptr_t> =
nullptr>
346 auto args_size = args.size();
347 return setImpl(return_type, std::move(args),
348 [args_size, callback = std::move(callback)](
351 catchAll([&] { callback(handle); }, handle);
372 template <
typename T,
373 typename std::enable_if_t<
374 std::is_same_v<std::invoke_result_t<T, CallHandle>,
void>,
375 std::nullptr_t> =
nullptr>
378 auto args_size = args.size();
380 return_type, std::move(args),
383 std::move(callback))](
const CallHandle &handle) {
385 std::thread([callback, handle] {
386 catchAll([&] { callback->operator()(handle); }, handle);
407 template <
typename T,
408 typename std::enable_if_t<
409 std::is_same_v<std::invoke_result_t<T, CallHandle>,
void>,
410 std::nullptr_t> =
nullptr>
412 return setImpl(ValType::none_, std::nullopt,
413 [base = *
this, callback = std::move(callback)](
416 catchAll([&] { callback(handle); }, handle);
436 template <
typename T,
437 typename std::enable_if_t<
438 std::is_same_v<std::invoke_result_t<T, CallHandle>,
void>,
439 std::nullptr_t> =
nullptr>
442 ValType::none_, std::nullopt,
445 std::move(callback))](
const CallHandle &handle) {
447 std::thread([callback, handle] {
448 catchAll([&] { callback->operator()(handle); }, handle);
462 [[deprecated(
"Func::hidden() does nothing since ver1.10")]]
471 const Func &free()
const;
485 template <
typename... Args>
486 [[deprecated(
"use runAsync")]]
490 [[deprecated(
"use runAsync")]]
492 auto p = runAsync(std::move(args_vec));
496 throw Rejection(*
this, std::string(p.rejection()));
508 template <
typename... Args>
509 [[deprecated(
"use runAsync")]]
527 template <
typename... Args>
531 Promise runAsync(std::vector<ValAdaptor> args_vec)
const;
558 const Func &setIndex(
int index)
const;
571 std::vector<Arg> args()
const;
588 const Func &setArgs(
const std::vector<Arg> &args)
const;
598 const Func &setReturnType(
ValType return_type)
const;
604 template <
typename T,
typename std::enable_if_t<std::is_same_v<T, Func>,
605 std::
nullptr_t> =
nullptr>
607 return static_cast<Field>(*this) ==
static_cast<Field>(other);
609 template <
typename T,
typename std::enable_if_t<std::is_same_v<T, Func>,
610 std::
nullptr_t> =
nullptr>
612 return static_cast<Field>(*this) !=
static_cast<Field>(other);
618 std::vector<Arg> args_{};
643 ValType return_type = ValType::none_) {
644 this->args_.resize(args_num);
645 this->return_type_ = return_type;
667 this->return_type_ = type;
679 [[deprecated(
"FuncListener::hidden() does nothing since ver1.10")]]
693 std::optional<FuncCallHandle> fetchCall()
const;
引数の情報を表す。
Definition arg.h:30
呼び出された関数の引数の取得と戻り値のセットをするインタフェース
Definition func_result.h:318
void respond(const ValAdaptor &value) const
Definition func_result.cc:76
const std::vector< ValAdaptor > & args() const
関数の引数を取得する
Definition func_result.cc:325
void reject(const ValAdaptor &message) const
Definition func_result.cc:94
bool assertArgsNum(std::size_t expected) const
引数の数をチェックする
Definition func_result.cc:113
FuncListener(const Field &base, const SharedString &field)
Definition func.h:623
FuncListener & setReturnType(ValType type)
戻り値の型をセットする
Definition func.h:666
FuncListener & setArgs(const std::vector< Arg > &args)
引数の情報をセットする
Definition func.h:656
FuncListener & hidden(bool)
関数を関数リストで非表示にする (他clientのentryに表示されなくする)
Definition func.h:680
FuncListener & listen(std::size_t args_num, ValType return_type=ValType::none_)
関数呼び出しの待受を開始する
Definition func.h:642
関数1つを表すクラス
Definition func.h:106
ValAdaptor operator()(Args... args) const
run()と同じ
Definition func.h:510
bool operator==(const T &other) const
Funcの参照先を比較
Definition func.h:606
const Func & setAsync(T func) const
非同期に実行される関数をセットする
Definition func.h:274
const Func & setAsync(T callback) const
引数にFuncCallHandleを取り非同期に実行される関数を登録する
Definition func.h:440
ValAdaptor run(Args... args) const
関数を実行する (同期)
Definition func.h:487
const Func & hidden(bool) const
関数を関数リストで非表示にする (他clientのentryに表示されなくする)
Definition func.h:463
const Func & setAsync(std::vector< Arg > args, ValType return_type, T callback) const
引数にFuncCallHandleを取り非同期に実行される関数を登録する
Definition func.h:376
Func operator[](StringInitializer field) const
Definition func.h:144
Func child(int index) const
Definition func.h:134
void(CallHandle) FuncType
Definition func.h:162
const Arg args(std::size_t i) const
Definition func.h:573
const Func & operator=(T func) const
関数をセットする
Definition func.h:316
static void catchAll(F1 &&f_run, const CallHandle &handle)
Definition func.h:185
Func child(StringInitializer field) const
「(thisの名前).(追加の名前)」を新しい名前とするField
Definition func.h:126
bool operator!=(const T &other) const
Definition func.h:611
const Func & set(std::vector< Arg > args, ValType return_type, T callback) const
引数にCallHandleを取る関数を登録する
Definition func.h:344
Func(const Field &base, const SharedString &field)
Definition func.h:113
ValAdaptor run(std::vector< ValAdaptor > &&args_vec) const
Definition func.h:491
static void tryRun(F1 &&f_run, const CallHandle &handle)
Definition func.h:210
const Func & set(T func) const
関数をセットする
Definition func.h:233
const Func & set(T callback) const
引数にCallHandleを取る関数を登録する
Definition func.h:411
Func parent() const
nameの最後のピリオドの前までを新しい名前とするField
Definition func.h:160
Func operator[](int index) const
Definition func.h:153
Promise runAsync(Args... args) const
関数を実行する (非同期)
Definition func.h:528
非同期で実行した関数の実行結果を取得するインタフェース。
Definition func_result.h:37
u8stringとstringとwstringをshared_ptrで持ち共有する
Definition encoding.h:159
SharedString のpublicなコンストラクタインタフェース (入力専用)
Definition encoding.h:215
Definition component_canvas2d.h:148
Viewを構築するときに使う一時的なViewComponent.
Definition component_view.h:292
数値、文字列などの値を相互変換するクラス
Definition val_adaptor.h:87
std::nullptr_t TraitOkType
Definition trait.h:11
std::conditional_t< std::disjunction_v< std::is_void< Ret >, std::is_constructible< ValAdaptor, Ret > >, FuncReturnTypeCheckOkTrait, This_return_type_is_not_supported_by_WebCFace_Func< Ret > > FuncReturnTypeTrait
Definition func.h:63
constexpr std::nullptr_t TraitOk
Definition trait.h:12
typename FuncArgTypesIterationTrait< Args... >::ArgTypesCheckResult FuncArgTypesTrait
Definition func.h:51
constexpr auto getInvokeSignature(T &&) -> decltype(&T::operator())
Definition func_trait.h:13
void argToTuple(const std::vector< ValAdaptor > &args, T &tuple)
ValAdaptorのリストから任意の型のタプルに変換する
Definition val_adaptor.h:423
ValType
引数や戻り値の型を表すenum
Definition val_adaptor.h:21
ValType valTypeOf()
TのValTypeを得る
Definition val_adaptor.h:34
ClientDataの参照とメンバ名とデータ名を持つクラス
Definition field.h:71
Field parent() const
nameの最後のピリオドの前までを新しい名前とするField
Definition field.cc:33
Field child(const SharedString &field) const
Definition field.cc:42
Funcの実行ができなかった場合発生する例外
Definition exception.h:24
Funcがrejectした(例外を投げた)場合の例外
Definition exception.h:34
typename std::conditional_t< IsConstructibleArg< std::decay_t< FirstArg > >::value, FuncArgTypesIterationTrait< OtherArgs... >, FuncArgTypesIterationFailureTrait< FirstArg > >::ArgTypesCheckResult ArgTypesCheckResult
Definition func.h:47
TraitOkType ArgTypesCheckOk
Definition func.h:39
TraitOkType FuncReturnTypeCheckOk
Definition func.h:56
static std::vector< Arg > argsInfo()
Definition func.h:82
FuncReturnTypeTrait< Ret > ReturnTypeTrait
Definition func.h:76
static bool assertArgsNum(const CallHandle &handle)
Definition func.h:79
FuncArgTypesTrait< Args... > ArgTypesTrait
Definition func.h:77
Definition func_trait.h:21
#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
#define WEBCFACE_CALL_FP
Definition webcface-config.h:107