15 return &T::operator();
17template <
typename Ret,
typename... Args>
31template <
typename... Args>
41template <
typename Ret>
44 std::is_constructible_v<ValAdaptor, Ret>> {};
55template <
typename Ret,
typename... Args>
59 static constexpr bool return_void = std::is_same_v<Ret, void>;
64 return std::vector<Arg>{
Arg{valTypeOf<Args>()}...};
67 using ArgsTuple = std::tuple<std::decay_t<Args>...>;
69template <
typename Ret,
typename T,
typename... Args>
72template <
typename Ret,
typename T,
typename... Args>
75template <
typename Ret,
typename... Args>
105 using Field::lastName;
157 return child(std::to_string(index));
172 const Func &setImpl(
ValType return_type, std::vector<Arg> &&args,
173 std::function<FuncType> &&func_impl)
const;
178 const Func &setImpl(
ValType return_type, std::nullopt_t,
179 std::function<FuncType> &&func_impl)
const;
181 setImpl(
const std::shared_ptr<internal::FuncInfo> &func_info)
const;
187 template <
typename F1>
193 }
catch (
const std::exception &e) {
195 }
catch (
const std::string &e) {
197 }
catch (
const char *e) {
199 }
catch (
const std::wstring &e) {
201 }
catch (
const wchar_t *e) {
204 error =
"unknown exception";
212 template <
typename F1>
214 catchAll([&] { handle.
respond(f_run()); }, handle);
231 template <
typename T,
235 ArgTypesSupportedByWebCFaceFunc = traits::TraitOk>
240 [func = std::move(func)](
const CallHandle &handle) {
248 std::apply(func, args_tuple);
251 auto ret = std::apply(func, args_tuple);
272 template <
typename T,
276 ArgTypesSupportedByWebCFaceFunc = traits::TraitOk>
281 [func_p = std::make_shared<T>(std::move(func))](
287 [func_p, handle](
auto args_tuple) {
292 std::apply(*func_p, args_tuple);
296 std::apply(*func_p, args_tuple);
302 std::move(args_tuple))
317 template <
typename T>
318 [[deprecated(
"use set() or setAsync()")]]
const Func &
320 this->set(std::move(func));
343 template <
typename T,
344 typename std::enable_if_t<
345 std::is_same_v<std::invoke_result_t<T, CallHandle>,
void>,
346 std::nullptr_t> =
nullptr>
349 auto args_size = args.size();
350 return setImpl(return_type, std::move(args),
351 [args_size, callback = std::move(callback)](
354 catchAll([&] { callback(handle); }, handle);
375 template <
typename T,
376 typename std::enable_if_t<
377 std::is_same_v<std::invoke_result_t<T, CallHandle>,
void>,
378 std::nullptr_t> =
nullptr>
381 auto args_size = args.size();
383 return_type, std::move(args),
386 std::move(callback))](
const CallHandle &handle) {
388 std::thread([callback, handle] {
389 catchAll([&] { callback->operator()(handle); }, handle);
410 template <
typename T,
411 typename std::enable_if_t<
412 std::is_same_v<std::invoke_result_t<T, CallHandle>,
void>,
413 std::nullptr_t> =
nullptr>
415 return setImpl(ValType::none_, std::nullopt,
416 [base = *
this, callback = std::move(callback)](
419 catchAll([&] { callback(handle); }, handle);
439 template <
typename T,
440 typename std::enable_if_t<
441 std::is_same_v<std::invoke_result_t<T, CallHandle>,
void>,
442 std::nullptr_t> =
nullptr>
445 ValType::none_, std::nullopt,
448 std::move(callback))](
const CallHandle &handle) {
450 std::thread([callback, handle] {
451 catchAll([&] { callback->operator()(handle); }, handle);
465 [[deprecated(
"Func::hidden() does nothing since ver1.10")]]
474 const Func &free()
const;
488 template <
typename... Args>
489 [[deprecated(
"use runAsync")]]
493 [[deprecated(
"use runAsync")]]
495 auto p = runAsync(std::move(args_vec));
499 throw std::runtime_error(p.rejection());
511 template <
typename... Args>
512 [[deprecated(
"use runAsync")]]
530 template <
typename... Args>
534 Promise runAsync(std::vector<ValAdaptor> args_vec)
const;
561 const Func &setIndex(
int index)
const;
574 std::vector<Arg> args()
const;
591 const Func &setArgs(
const std::vector<Arg> &args)
const;
601 const Func &setReturnType(
ValType return_type)
const;
607 template <
typename T,
typename std::enable_if_t<std::is_same_v<T, Func>,
608 std::
nullptr_t> =
nullptr>
610 return static_cast<Field>(*this) ==
static_cast<Field>(other);
612 template <
typename T,
typename std::enable_if_t<std::is_same_v<T, Func>,
613 std::
nullptr_t> =
nullptr>
615 return static_cast<Field>(*this) !=
static_cast<Field>(other);
621 std::vector<Arg> args_{};
646 ValType return_type = ValType::none_) {
647 this->args_.resize(args_num);
648 this->return_type_ = return_type;
670 this->return_type_ = type;
682 [[deprecated(
"FuncListener::hidden() does nothing since ver1.10")]]
696 std::optional<FuncCallHandle> fetchCall()
const;
引数の情報を表す。
Definition arg.h:30
呼び出された関数の引数の取得と戻り値のセットをするインタフェース
Definition func_result.h:323
void respond(const ValAdaptor &value) const
Definition func_result.cc:83
const std::vector< ValAdaptor > & args() const
関数の引数を取得する
Definition func_result.cc:332
void reject(const ValAdaptor &message) const
Definition func_result.cc:101
bool assertArgsNum(std::size_t expected) const
引数の数をチェックする
Definition func_result.cc:123
FuncListener(const Field &base, const SharedString &field)
Definition func.h:626
FuncListener & setReturnType(ValType type)
戻り値の型をセットする
Definition func.h:669
FuncListener & setArgs(const std::vector< Arg > &args)
引数の情報をセットする
Definition func.h:659
FuncListener & hidden(bool)
関数を関数リストで非表示にする (他clientのentryに表示されなくする)
Definition func.h:683
FuncListener & listen(std::size_t args_num, ValType return_type=ValType::none_)
関数呼び出しの待受を開始する
Definition func.h:645
関数1つを表すクラス
Definition func.h:95
ValAdaptor operator()(Args... args) const
run()と同じ
Definition func.h:513
Func child(std::wstring_view field) const
「(thisの名前).(追加の名前)」を新しい名前とするField (wstring)
Definition func.h:120
bool operator==(const T &other) const
Funcの参照先を比較
Definition func.h:609
const Func & setAsync(T func) const
非同期に実行される関数をセットする
Definition func.h:277
const Func & setAsync(T callback) const
引数にFuncCallHandleを取り非同期に実行される関数を登録する
Definition func.h:443
ValAdaptor run(Args... args) const
関数を実行する (同期)
Definition func.h:490
const Func & hidden(bool) const
関数を関数リストで非表示にする (他clientのentryに表示されなくする)
Definition func.h:466
Func child(std::string_view field) const
「(thisの名前).(追加の名前)」を新しい名前とするField
Definition func.h:113
const Func & setAsync(std::vector< Arg > args, ValType return_type, T callback) const
引数にFuncCallHandleを取り非同期に実行される関数を登録する
Definition func.h:379
Func child(int index) const
Definition func.h:128
void(CallHandle) FuncType
Definition func.h:165
Func operator[](std::string_view field) const
Definition func.h:135
const Arg args(std::size_t i) const
Definition func.h:576
const Func & operator=(T func) const
関数をセットする
Definition func.h:319
static void catchAll(F1 &&f_run, const CallHandle &handle)
Definition func.h:188
bool operator!=(const T &other) const
Definition func.h:614
Func operator[](const wchar_t *field) const
Definition func.h:149
Func operator[](std::wstring_view field) const
Definition func.h:140
const Func & set(std::vector< Arg > args, ValType return_type, T callback) const
引数にCallHandleを取る関数を登録する
Definition func.h:347
Func(const Field &base, const SharedString &field)
Definition func.h:102
ValAdaptor run(std::vector< ValAdaptor > &&args_vec) const
Definition func.h:494
static void tryRun(F1 &&f_run, const CallHandle &handle)
Definition func.h:213
const Func & set(T func) const
関数をセットする
Definition func.h:236
const Func & set(T callback) const
引数にCallHandleを取る関数を登録する
Definition func.h:414
Func parent() const
nameの最後のピリオドの前までを新しい名前とするField
Definition func.h:163
Func operator[](int index) const
Definition func.h:156
Func operator[](const char *field) const
Definition func.h:145
Promise runAsync(Args... args) const
関数を実行する (非同期)
Definition func.h:531
非同期で実行した関数の実行結果を取得するインタフェース。
Definition func_result.h:50
u8stringとstringとwstringをshared_ptrで持ち共有する
Definition encoding.h:67
Definition component_canvas2d.h:139
Viewを構築するときに使う一時的なViewComponent.
Definition component_view.h:286
数値、文字列などの値を相互変換するクラス
Definition val_adaptor.h:87
static const ValAdaptor & emptyVal()
Definition val_adaptor.cc:6
std::nullptr_t TraitOkType
Definition trait.h:11
decltype(getInvokeSignature(std::declval< std::decay_t< T > >())) InvokeSignature
Definition func.h:23
constexpr std::nullptr_t TraitOk
Definition trait.h:12
constexpr auto getInvokeSignature(T &&) -> decltype(&T::operator())
Definition func.h:14
void argToTuple(const std::vector< ValAdaptor > &args, T &tuple)
ValAdaptorのリストから任意の型のタプルに変換する
Definition val_adaptor.h:331
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 func_result.h:32
TraitOkType ArgTypesSupportedByWebCFaceFunc
Definition func.h:29
TraitOkType ReturnTypeSupportedByWebCFaceFunc
Definition func.h:39
static std::vector< Arg > argsInfo()
Definition func.h:63
Ret ReturnType
Definition func.h:66
static bool assertArgsNum(const CallHandle &handle)
Definition func.h:60
std::tuple< std::decay_t< Args >... > ArgsTuple
Definition func.h:67
#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