1111
1212#pragma once
1313
14+ #include < variant>
15+
1416#include " fn_meta.h"
1517
1618namespace rtl ::dispatch
1719{
1820 template <class ...args_t >
19- struct fn_signature : fn_meta
21+ struct function_er_ctor : fn_lambda
2022 {
21- using lambda_vt = std::function<void (const fn_meta&, traits::normal_sign_t <args_t >...)>;
22-
23- using lambda_rt = std::function<std::any(const fn_meta&, traits::normal_sign_t <args_t >...)>;
24-
25- using lambda_ctor_t = std::function<Return(alloc, traits::normal_sign_t <args_t >...)>;
26-
27- using lambda_mth_vt = std::function<void (const lambda_base&, const RObject&, traits::normal_sign_t <args_t >...)>;
23+ using lambda_t = std::function<Return(alloc, traits::normal_sign_t <args_t >...)>;
2824
29- using lambda_mth_rt = std::function<std::any(const lambda_base&, const RObject&, traits::normal_sign_t <args_t >...)>;
30-
31- constexpr lambda_vt get_function_vhop () const {
32- return fn_vhop;
25+ const lambda_t & get_ctor_hop () const {
26+ return m_lambda;
3327 }
3428
35- constexpr lambda_rt get_function_rhop () const {
36- return fn_rhop;
37- }
38-
39- constexpr lambda_ctor_t get_ctor_hop () const {
40- return ctor_hop;
41- }
29+ private:
4230
43- constexpr lambda_mth_vt get_method_vhop () const {
44- return mth_vhop;
45- }
31+ lambda_t m_lambda;
4632
47- constexpr lambda_mth_rt get_method_rhop () const {
48- return mth_rhop ;
33+ void set_ctor_hop ( const lambda_t & lambda) {
34+ m_lambda = lambda ;
4935 }
36+ };
37+ }
5038
51- private:
52-
53- lambda_vt fn_vhop = nullptr ;
54- lambda_rt fn_rhop = nullptr ;
55-
56- lambda_mth_vt mth_vhop = nullptr ;
57- lambda_mth_rt mth_rhop = nullptr ;
58- lambda_ctor_t ctor_hop = nullptr ;
5939
60- fn_lambda* erased_return = nullptr ;
61- fn_lambda* erased_target = nullptr ;
40+ namespace rtl ::dispatch
41+ {
42+ template <class ...args_t >
43+ struct function_er_return : fn_lambda
44+ {
45+ using lambda_vt = std::function<void (const fn_meta&, traits::normal_sign_t <args_t >...)>;
46+ using lambda_rt = std::function<std::any(const fn_meta&, traits::normal_sign_t <args_t >...)>;
6247
63- constexpr void set_function_vhop ( const lambda_vt& lambda ) const {
64- fn_vhop = lambda ;
48+ const lambda_vt& get_method_vhop ( ) const {
49+ return std::get<lambda_vt>(m_lambda) ;
6550 }
6651
67- constexpr void set_function_rhop ( const lambda_rt& lambda ) const {
68- fn_rhop = lambda ;
52+ const lambda_rt& get_method_rhop ( ) const {
53+ return std::get<lambda_rt>(m_lambda) ;
6954 }
7055
71- constexpr void set_ctor_hop ( const lambda_ctor_t & lambda) const {
72- ctor_hop = lambda;
73- }
56+ private:
57+
58+ std::variant<lambda_vt, lambda_rt> m_lambda;
7459
75- constexpr void set_method_vhop (const lambda_mth_vt & lambda) const {
76- mth_vhop = lambda;
60+ void set_method_vhop (const lambda_vt & lambda) {
61+ m_lambda = lambda;
7762 }
7863
79- constexpr void set_method_rhop (const lambda_mth_rt & lambda) const {
80- mth_rhop = lambda;
64+ void set_method_rhop (const lambda_rt & lambda) {
65+ m_lambda = lambda;
8166 }
8267 };
8368}
0 commit comments