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;
164 const Func &setImpl(
ValType return_type, std::vector<Arg> &&args,
165 std::function<FuncType> &&func_impl)
const;
170 const Func &setImpl(
ValType return_type, std::nullopt_t,
171 std::function<FuncType> &&func_impl)
const;
173 setImpl(
const std::shared_ptr<internal::FuncInfo> &func_info)
const;
179 template <
typename F1>
185 }
catch (
const std::exception &e) {
187 }
catch (
const std::string &e) {
189 }
catch (
const char *e) {
191 }
catch (
const std::wstring &e) {
193 }
catch (
const wchar_t *e) {
196 error =
"unknown exception";
204 template <
typename F1>
206 catchAll([&] { handle.
respond(f_run()); }, handle);
223 template <
typename T,
227 ArgTypesSupportedByWebCFaceFunc = traits::TraitOk>
232 [func = std::move(func)](
const CallHandle &handle) {
240 std::apply(func, args_tuple);
243 auto ret = std::apply(func, args_tuple);
264 template <
typename T,
268 ArgTypesSupportedByWebCFaceFunc = traits::TraitOk>
273 [func_p = std::make_shared<T>(std::move(func))](
279 [func_p, handle](
auto args_tuple) {
284 std::apply(*func_p, args_tuple);
288 std::apply(*func_p, args_tuple);
294 std::move(args_tuple))
309 template <
typename T>
310 [[deprecated(
"use set() or setAsync()")]]
const Func &
312 this->set(std::move(func));
335 template <
typename T,
336 typename std::enable_if_t<
337 std::is_same_v<std::invoke_result_t<T, CallHandle>,
void>,
338 std::nullptr_t> =
nullptr>
341 auto args_size = args.size();
342 return setImpl(return_type, std::move(args),
343 [args_size, callback = std::move(callback)](
346 catchAll([&] { callback(handle); }, handle);
367 template <
typename T,
368 typename std::enable_if_t<
369 std::is_same_v<std::invoke_result_t<T, CallHandle>,
void>,
370 std::nullptr_t> =
nullptr>
373 auto args_size = args.size();
375 return_type, std::move(args),
378 std::move(callback))](
const CallHandle &handle) {
380 std::thread([callback, handle] {
381 catchAll([&] { callback->operator()(handle); }, handle);
402 template <
typename T,
403 typename std::enable_if_t<
404 std::is_same_v<std::invoke_result_t<T, CallHandle>,
void>,
405 std::nullptr_t> =
nullptr>
407 return setImpl(ValType::none_, std::nullopt,
408 [base = *
this, callback = std::move(callback)](
411 catchAll([&] { callback(handle); }, handle);
431 template <
typename T,
432 typename std::enable_if_t<
433 std::is_same_v<std::invoke_result_t<T, CallHandle>,
void>,
434 std::nullptr_t> =
nullptr>
437 ValType::none_, std::nullopt,
440 std::move(callback))](
const CallHandle &handle) {
442 std::thread([callback, handle] {
443 catchAll([&] { callback->operator()(handle); }, handle);
457 [[deprecated(
"Func::hidden() does nothing since ver1.10")]]
466 const Func &free()
const;
480 template <
typename... Args>
481 [[deprecated(
"use runAsync")]]
485 [[deprecated(
"use runAsync")]]
487 auto p = runAsync(std::move(args_vec));
491 throw std::runtime_error(p.rejection());
503 template <
typename... Args>
504 [[deprecated(
"use runAsync")]]
522 template <
typename... Args>
526 Promise runAsync(std::vector<ValAdaptor> args_vec)
const;
546 std::vector<Arg> args()
const;
563 const Func &setArgs(
const std::vector<Arg> &args)
const;
572 const Func &setReturnType(
ValType return_type)
const;
578 template <
typename T,
typename std::enable_if_t<std::is_same_v<T, Func>,
579 std::
nullptr_t> =
nullptr>
581 return static_cast<Field>(*this) ==
static_cast<Field>(other);
583 template <
typename T,
typename std::enable_if_t<std::is_same_v<T, Func>,
584 std::
nullptr_t> =
nullptr>
586 return static_cast<Field>(*this) !=
static_cast<Field>(other);
592 std::vector<Arg> args_{};
617 ValType return_type = ValType::none_) {
618 this->args_.resize(args_num);
619 this->return_type_ = return_type;
641 this->return_type_ = type;
653 [[deprecated(
"FuncListener::hidden() does nothing since ver1.10")]]
667 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:597
FuncListener & setReturnType(ValType type)
戻り値の型をセットする
Definition func.h:640
FuncListener & setArgs(const std::vector< Arg > &args)
引数の情報をセットする
Definition func.h:630
FuncListener & hidden(bool)
関数を関数リストで非表示にする (他clientのentryに表示されなくする)
Definition func.h:654
FuncListener & listen(std::size_t args_num, ValType return_type=ValType::none_)
関数呼び出しの待受を開始する
Definition func.h:616
関数1つを表すクラス
Definition func.h:95
ValAdaptor operator()(Args... args) const
run()と同じ
Definition func.h:505
Func child(std::wstring_view field) const
「(thisの名前).(追加の名前)」を新しい名前とするField (wstring)
Definition func.h:120
bool operator==(const T &other) const
Funcの参照先を比較
Definition func.h:580
const Func & setAsync(T func) const
非同期に実行される関数をセットする
Definition func.h:269
const Func & setAsync(T callback) const
引数にFuncCallHandleを取り非同期に実行される関数を登録する
Definition func.h:435
ValAdaptor run(Args... args) const
関数を実行する (同期)
Definition func.h:482
const Func & hidden(bool) const
関数を関数リストで非表示にする (他clientのentryに表示されなくする)
Definition func.h:458
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:371
Func child(int index) const
Definition func.h:126
void(CallHandle) FuncType
Definition func.h:157
Func operator[](std::string_view field) const
Definition func.h:131
const Arg args(std::size_t i) const
Definition func.h:548
const Func & operator=(T func) const
関数をセットする
Definition func.h:311
static void catchAll(F1 &&f_run, const CallHandle &handle)
Definition func.h:180
bool operator!=(const T &other) const
Definition func.h:585
Func operator[](const wchar_t *field) const
Definition func.h:145
Func operator[](std::wstring_view field) const
Definition func.h:136
const Func & set(std::vector< Arg > args, ValType return_type, T callback) const
引数にCallHandleを取る関数を登録する
Definition func.h:339
Func(const Field &base, const SharedString &field)
Definition func.h:102
ValAdaptor run(std::vector< ValAdaptor > &&args_vec) const
Definition func.h:486
static void tryRun(F1 &&f_run, const CallHandle &handle)
Definition func.h:205
const Func & set(T func) const
関数をセットする
Definition func.h:228
const Func & set(T callback) const
引数にCallHandleを取る関数を登録する
Definition func.h:406
Func parent() const
nameの最後のピリオドの前までを新しい名前とするField
Definition func.h:155
Func operator[](int index) const
Definition func.h:150
Func operator[](const char *field) const
Definition func.h:141
Promise runAsync(Args... args) const
関数を実行する (非同期)
Definition func.h:523
非同期で実行した関数の実行結果を取得するインタフェース。
Definition func_result.h:50
u8stringとstringとwstringをshared_ptrで持ち共有する
Definition encoding.h:69
Definition component_canvas2d.h:137
Viewを構築するときに使う一時的なViewComponent.
Definition component_view.h:267
数値、文字列などの値を相互変換するクラス
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:70
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:60
#define WEBCFACE_NS_END
Definition webcface-config.h:104
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:103
#define WEBCFACE_CALL_FP
Definition webcface-config.h:98