1212#pragma once
1313
1414#include < any>
15- #include " rtl_forward_decls.h"
15+
16+ #include " method_ptr.h"
1617
1718namespace rtl ::dispatch
1819{
@@ -22,12 +23,11 @@ namespace rtl::dispatch
2223 // erased-return-aware-target-function-void
2324 constexpr static auto e_return_a_target_fnv () noexcept
2425 {
25- return [](const lambda_base& lambda , const record_t & p_target, traits::normal_sign_t <signature_t >&&... params)-> auto
26+ return [](const functor& fn , const record_t & p_target, traits::normal_sign_t <signature_t >&&... params)-> auto
2627 {
2728 if constexpr (std::is_void_v<return_t >)
2829 {
29- auto mptr = lambda.template to_method <record_t , signature_t ...>()
30- .template get_functor <void >();
30+ auto mptr = static_cast <const method_ptr<record_t , return_t , signature_t ...>&>(fn).f_ptr ();
3131
3232 (const_cast <record_t &>(p_target).*mptr)(std::forward<signature_t >(params)...);
3333 }
@@ -37,15 +37,14 @@ namespace rtl::dispatch
3737 // erased-target-aware-return-function-void
3838 constexpr static auto e_target_a_return_fnv () noexcept
3939 {
40- return [](const lambda_base& lambda , const RObject& p_target, traits::normal_sign_t <signature_t >&&... params)-> auto
40+ return [](const functor& fn , const RObject& p_target, traits::normal_sign_t <signature_t >&&... params)-> auto
4141 {
4242 if constexpr (std::is_void_v<return_t >)
4343 {
44- auto mptr = lambda.template to_method <record_t , signature_t ...>()
45- .template get_functor <void >();
46-
4744 const auto & target = p_target.view <record_t >()->get ();
4845
46+ auto mptr = static_cast <const method_ptr<record_t , return_t , signature_t ...>&>(fn).f_ptr ();
47+
4948 (const_cast <record_t &>(target).*mptr)(std::forward<signature_t >(params)...);
5049 }
5150 };
@@ -54,15 +53,14 @@ namespace rtl::dispatch
5453 // erased-return-erased-target-function-void
5554 constexpr static auto e_return_e_target_fnv () noexcept
5655 {
57- return [](const lambda_base& lambda , const RObject& p_target, traits::normal_sign_t <signature_t >&&... params)-> auto
56+ return [](const functor& fn , const RObject& p_target, traits::normal_sign_t <signature_t >&&... params)-> auto
5857 {
5958 if constexpr (std::is_void_v<return_t >)
6059 {
61- auto mptr = lambda.template to_method <record_t , signature_t ...>()
62- .template get_functor <void >();
63-
6460 const auto & target = p_target.view <record_t >()->get ();
6561
62+ auto mptr = static_cast <const method_ptr<record_t , return_t , signature_t ...>&>(fn).f_ptr ();
63+
6664 (const_cast <record_t &>(target).*mptr)(std::forward<signature_t >(params)...);
6765 }
6866 };
@@ -71,15 +69,14 @@ namespace rtl::dispatch
7169 // erased-target-aware-return-function-returns(return_t)
7270 constexpr static auto e_target_a_return_fnr () noexcept
7371 {
74- return [](const lambda_base& lambda , const RObject& p_target, traits::normal_sign_t <signature_t >&&... params)-> return_t
72+ return [](const functor& fn , const RObject& p_target, traits::normal_sign_t <signature_t >&&... params)-> return_t
7573 {
7674 if constexpr (!std::is_void_v<return_t >)
7775 {
78- auto mptr = lambda.template to_method <record_t , signature_t ...>()
79- .template get_functor <return_t >();
80-
8176 const auto & target = p_target.view <record_t >()->get ();
8277
78+ auto mptr = static_cast <const method_ptr<record_t , return_t , signature_t ...>&>(fn).f_ptr ();
79+
8380 return (const_cast <record_t &>(target).*mptr)(std::forward<signature_t >(params)...);
8481 }
8582 };
@@ -88,12 +85,11 @@ namespace rtl::dispatch
8885 // erased-return-aware-target-function-returns(std::any)
8986 constexpr static auto e_return_a_target_fnr () noexcept
9087 {
91- return [](const lambda_base& lambda , const record_t & p_target, traits::normal_sign_t <signature_t >&&...params )-> auto
88+ return [](const functor& fn , const record_t & p_target, traits::normal_sign_t <signature_t >&&...params )-> auto
9289 {
9390 if constexpr (!std::is_void_v<return_t >)
9491 {
95- auto mptr = lambda.template to_method <record_t , signature_t ...>()
96- .template get_functor <return_t >();
92+ auto mptr = static_cast <const method_ptr<record_t , return_t , signature_t ...>&>(fn).f_ptr ();
9793
9894 auto && ret_v = (const_cast <record_t &>(p_target).*mptr)(std::forward<signature_t >(params)...);
9995
@@ -122,15 +118,14 @@ namespace rtl::dispatch
122118 // erased-return-erased-target-function-returns(std::any)
123119 constexpr static auto e_return_e_target_fnr () noexcept
124120 {
125- return [](const lambda_base& lambda , const RObject& p_target, traits::normal_sign_t <signature_t >&&... params)-> auto
121+ return [](const functor& fn , const RObject& p_target, traits::normal_sign_t <signature_t >&&... params)-> auto
126122 {
127123 if constexpr (!std::is_void_v<return_t >)
128124 {
129- auto mptr = lambda.template to_method <record_t , signature_t ...>()
130- .template get_functor <return_t >();
131-
132125 const auto & target = p_target.view <record_t >()->get ();
133126
127+ auto mptr = static_cast <const method_ptr<record_t , return_t , signature_t ...>&>(fn).f_ptr ();
128+
134129 auto && ret_v = (const_cast <record_t &>(target).*mptr)(std::forward<signature_t >(params)...);
135130
136131 if constexpr (std::is_pointer_v<return_t >)
0 commit comments