From e458d9e486f9a916714931c0c34b64f3d2352f58 Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Sun, 7 Sep 2025 08:24:13 +0530 Subject: [PATCH 1/4] benchmarking std::any/std::function --- RTLBenchmarkApp/src/BenchMark.cpp | 32 +++++++++++++++++++++++++++---- RTLBenchmarkApp/src/BenchMark.h | 3 +++ RTLBenchmarkApp/src/main.cpp | 27 +++++++++++++------------- 3 files changed, 44 insertions(+), 18 deletions(-) diff --git a/RTLBenchmarkApp/src/BenchMark.cpp b/RTLBenchmarkApp/src/BenchMark.cpp index 909419b5..27a66626 100644 --- a/RTLBenchmarkApp/src/BenchMark.cpp +++ b/RTLBenchmarkApp/src/BenchMark.cpp @@ -34,9 +34,9 @@ namespace rtl_bench void BenchMark::autoLambdaCall_noReturn(benchmark::State& state) { - auto sendMsg = [](const str_type& pMsg) { + static auto sendMsg = [](const str_type& pMsg) { sendMessage(pMsg); - }; + }; for (auto _ : state) { @@ -50,7 +50,7 @@ namespace rtl_bench { static std::function sendMsg = [](const str_type& pMsg) { sendMessage(pMsg); - }; + }; for (auto _ : state) { @@ -91,7 +91,7 @@ namespace rtl_bench { static std::function getMsg = [](const str_type& pMsg) { return getMessage(pMsg); - }; + }; for (auto _ : state) { @@ -102,6 +102,30 @@ namespace rtl_bench } +namespace rtl_bench +{ + void BenchMark::BM_FunctionCall(benchmark::State& state) + { + static std::function func = [](const str_type& pMsg) { + return getMessage(pMsg); + }; + + for (auto _ : state) { + benchmark::DoNotOptimize(func(g_longStr)); + } + } + + void BenchMark::BM_AnyCast(benchmark::State& state) + { + std::any a = getMessage; + for (auto _ : state) { + auto anyfunc = std::any_cast(a); + benchmark::DoNotOptimize(anyfunc(g_longStr)); + } + } +} + + namespace rtl_bench { void BenchMark::reflectedCall_noReturn(benchmark::State& state) diff --git a/RTLBenchmarkApp/src/BenchMark.h b/RTLBenchmarkApp/src/BenchMark.h index d485f971..ef8e032a 100644 --- a/RTLBenchmarkApp/src/BenchMark.h +++ b/RTLBenchmarkApp/src/BenchMark.h @@ -81,5 +81,8 @@ namespace rtl_bench static void reflectedCall_withReturn(benchmark::State& state); static void reflectedMethodCall_withReturn(benchmark::State& state); + + static void BM_FunctionCall(benchmark::State& state); + static void BM_AnyCast(benchmark::State& state); }; } \ No newline at end of file diff --git a/RTLBenchmarkApp/src/main.cpp b/RTLBenchmarkApp/src/main.cpp index a7eb54ec..18029fb7 100644 --- a/RTLBenchmarkApp/src/main.cpp +++ b/RTLBenchmarkApp/src/main.cpp @@ -4,20 +4,19 @@ #include "BenchMark.h" -// ------------------------------------------------------------ -// Register benchmarks -// ------------------------------------------------------------ +BENCHMARK(rtl_bench::BenchMark::BM_FunctionCall); +BENCHMARK(rtl_bench::BenchMark::BM_AnyCast); -BENCHMARK(rtl_bench::BenchMark::directCall_noReturn); -BENCHMARK(rtl_bench::BenchMark::autoLambdaCall_noReturn); -BENCHMARK(rtl_bench::BenchMark::stdFunctionCall_noReturn); -BENCHMARK(rtl_bench::BenchMark::reflectedCall_noReturn); -BENCHMARK(rtl_bench::BenchMark::reflectedMethodCall_noReturn); - -BENCHMARK(rtl_bench::BenchMark::directCall_withReturn); -BENCHMARK(rtl_bench::BenchMark::autoLambdaCall_withReturn); -BENCHMARK(rtl_bench::BenchMark::stdFunctionCall_withReturn); -BENCHMARK(rtl_bench::BenchMark::reflectedCall_withReturn); -BENCHMARK(rtl_bench::BenchMark::reflectedMethodCall_withReturn); +//BENCHMARK(rtl_bench::BenchMark::directCall_noReturn); +//BENCHMARK(rtl_bench::BenchMark::autoLambdaCall_noReturn); +//BENCHMARK(rtl_bench::BenchMark::stdFunctionCall_noReturn); +//BENCHMARK(rtl_bench::BenchMark::reflectedCall_noReturn); +//BENCHMARK(rtl_bench::BenchMark::reflectedMethodCall_noReturn); +// +//BENCHMARK(rtl_bench::BenchMark::directCall_withReturn); +//BENCHMARK(rtl_bench::BenchMark::autoLambdaCall_withReturn); +//BENCHMARK(rtl_bench::BenchMark::stdFunctionCall_withReturn); +//BENCHMARK(rtl_bench::BenchMark::reflectedCall_withReturn); +//BENCHMARK(rtl_bench::BenchMark::reflectedMethodCall_withReturn); BENCHMARK_MAIN(); From 524adff3c3730295f4bdd557f756f67ee23c070c Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Sun, 7 Sep 2025 16:12:02 +0530 Subject: [PATCH 2/4] introducing rtl::LambdaFunction --- RTLBenchmarkApp/src/BenchMark.cpp | 36 +++++++++------- RTLBenchmarkApp/src/BenchMark.h | 21 ++++++++-- RTLBenchmarkApp/src/main.cpp | 27 ++++++------ .../detail/inc/LambdaFunction.h | 41 +++++++++++++++++++ .../detail/src/CMakeLists.txt | 1 + 5 files changed, 95 insertions(+), 31 deletions(-) create mode 100644 ReflectionTemplateLib/detail/inc/LambdaFunction.h diff --git a/RTLBenchmarkApp/src/BenchMark.cpp b/RTLBenchmarkApp/src/BenchMark.cpp index 27a66626..ef5822c9 100644 --- a/RTLBenchmarkApp/src/BenchMark.cpp +++ b/RTLBenchmarkApp/src/BenchMark.cpp @@ -6,6 +6,8 @@ #include "BenchMark.h" +#include "LambdaFunction.h" + namespace { @@ -14,11 +16,10 @@ namespace { "nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure" "dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Except" "eur ssint occaecat cupidatat nnon proident, sunt in culpa qui officia deserunt mollit anim id"; - - // Pre-created string to isolate call overhead - static const std::string g_longStr(LONG_STR); } +// Pre-created string to isolate call overhead +static const std::string g_longStr(LONG_STR); namespace rtl_bench { @@ -78,7 +79,7 @@ namespace rtl_bench { auto getMsg = [](const str_type& pMsg) { return getMessage(pMsg); - }; + }; for (auto _ : state) { @@ -98,7 +99,6 @@ namespace rtl_bench benchmark::DoNotOptimize(getMsg(g_longStr)); } } - } @@ -106,21 +106,27 @@ namespace rtl_bench { void BenchMark::BM_FunctionCall(benchmark::State& state) { - static std::function func = [](const str_type& pMsg) { + static std::function getMsg = [](const str_type& pMsg) { return getMessage(pMsg); }; - - for (auto _ : state) { - benchmark::DoNotOptimize(func(g_longStr)); + + for (auto _ : state) + { + benchmark::DoNotOptimize(getMsg(g_longStr)); } } - void BenchMark::BM_AnyCast(benchmark::State& state) + void BenchMark::BM_LambdaFunc(benchmark::State& state) { - std::any a = getMessage; + static rtl::detail::LambdaFunction obj; + + static auto _ = []() { + obj.init(getMessage); + return 0; + }(); + for (auto _ : state) { - auto anyfunc = std::any_cast(a); - benchmark::DoNotOptimize(anyfunc(g_longStr)); + benchmark::DoNotOptimize(obj(g_longStr)); } } } @@ -195,7 +201,7 @@ namespace rtl_bench { static rtl::Record rNode = cxx_mirror().getRecord("Node").value(); static rtl::Method getMsg = rNode.getMethod("getMessage").value(); - static rtl::RObject robj = rNode.create().rObject; + static rtl::RObject robj = rNode.create().rObject; static auto _ = []() { if (getMsg.bind(robj).call(g_longStr).err == rtl::error::None) { std::cout << "[rtl:3] call success.\n"; @@ -211,4 +217,4 @@ namespace rtl_bench benchmark::DoNotOptimize(getMsg.bind(robj).call(g_longStr)); } } -} +} \ No newline at end of file diff --git a/RTLBenchmarkApp/src/BenchMark.h b/RTLBenchmarkApp/src/BenchMark.h index ef8e032a..a79f7a2e 100644 --- a/RTLBenchmarkApp/src/BenchMark.h +++ b/RTLBenchmarkApp/src/BenchMark.h @@ -21,10 +21,16 @@ namespace rtl_bench static std::optional g_msg; NOINLINE static void sendMessage(str_type pMsg) { + std::string result = pMsg + pMsg; + result = result + result; + result = result + result; g_msg = pMsg; } NOINLINE static str_type getMessage(str_type pMsg) { + std::string result = pMsg + pMsg; + result = result + result; + result = result + result; g_msg = pMsg; return str_type(pMsg); } @@ -32,12 +38,20 @@ namespace rtl_bench struct Node { NOINLINE void sendMessage(str_type pMsg) { + std::string result = pMsg + pMsg; + result = result + result; + result = result + result; + g_msg = pMsg; g_msg = pMsg; } - NOINLINE str_type getMessage(str_type pMsg) { + NOINLINE str_type getMessage(str_type pMsg) + { + std::string result = pMsg + pMsg; + result = result + result; + result = result + result; g_msg = pMsg; - return str_type(pMsg); + return pMsg; } }; @@ -83,6 +97,7 @@ namespace rtl_bench static void reflectedMethodCall_withReturn(benchmark::State& state); static void BM_FunctionCall(benchmark::State& state); - static void BM_AnyCast(benchmark::State& state); + + static void BM_LambdaFunc(benchmark::State& state); }; } \ No newline at end of file diff --git a/RTLBenchmarkApp/src/main.cpp b/RTLBenchmarkApp/src/main.cpp index 18029fb7..e074a5db 100644 --- a/RTLBenchmarkApp/src/main.cpp +++ b/RTLBenchmarkApp/src/main.cpp @@ -4,19 +4,20 @@ #include "BenchMark.h" -BENCHMARK(rtl_bench::BenchMark::BM_FunctionCall); -BENCHMARK(rtl_bench::BenchMark::BM_AnyCast); -//BENCHMARK(rtl_bench::BenchMark::directCall_noReturn); -//BENCHMARK(rtl_bench::BenchMark::autoLambdaCall_noReturn); -//BENCHMARK(rtl_bench::BenchMark::stdFunctionCall_noReturn); -//BENCHMARK(rtl_bench::BenchMark::reflectedCall_noReturn); -//BENCHMARK(rtl_bench::BenchMark::reflectedMethodCall_noReturn); -// -//BENCHMARK(rtl_bench::BenchMark::directCall_withReturn); -//BENCHMARK(rtl_bench::BenchMark::autoLambdaCall_withReturn); -//BENCHMARK(rtl_bench::BenchMark::stdFunctionCall_withReturn); -//BENCHMARK(rtl_bench::BenchMark::reflectedCall_withReturn); -//BENCHMARK(rtl_bench::BenchMark::reflectedMethodCall_withReturn); +BENCHMARK(rtl_bench::BenchMark::directCall_noReturn); +BENCHMARK(rtl_bench::BenchMark::autoLambdaCall_noReturn); +BENCHMARK(rtl_bench::BenchMark::stdFunctionCall_noReturn); +BENCHMARK(rtl_bench::BenchMark::reflectedCall_noReturn); +BENCHMARK(rtl_bench::BenchMark::reflectedMethodCall_noReturn); + +BENCHMARK(rtl_bench::BenchMark::directCall_withReturn); +BENCHMARK(rtl_bench::BenchMark::autoLambdaCall_withReturn); +BENCHMARK(rtl_bench::BenchMark::stdFunctionCall_withReturn); +BENCHMARK(rtl_bench::BenchMark::reflectedCall_withReturn); +BENCHMARK(rtl_bench::BenchMark::reflectedMethodCall_withReturn); + +BENCHMARK(rtl_bench::BenchMark::BM_LambdaFunc); +BENCHMARK(rtl_bench::BenchMark::BM_FunctionCall); BENCHMARK_MAIN(); diff --git a/ReflectionTemplateLib/detail/inc/LambdaFunction.h b/ReflectionTemplateLib/detail/inc/LambdaFunction.h new file mode 100644 index 00000000..1b1f3845 --- /dev/null +++ b/ReflectionTemplateLib/detail/inc/LambdaFunction.h @@ -0,0 +1,41 @@ +#pragma once + +#include "RObjectBuilder.hpp" + +namespace rtl::detail +{ + template + struct LambdaFunction + { + using Invoker = std::string(*)(void* , _signature&...); + + Invoker m_invoker = nullptr; + void* m_storage = nullptr; + + template + void init(_returnType(*pFunctor)(_signature...)) + { + struct Holder { + + using Functor = decltype(pFunctor); + Functor m_functor; + + Holder(Functor pFptr) : m_functor(pFptr) { } + }; + + static auto holder = Holder{ pFunctor }; + m_storage = &holder; + + m_invoker = +[](void* stor, _signature&... params) -> std::string { + + auto h = static_cast(stor); + return (h->m_functor)(params...); + }; + } + + std::string operator()(_signature&... params) + { + return m_invoker(m_storage, params...); + } + }; +} \ No newline at end of file diff --git a/ReflectionTemplateLib/detail/src/CMakeLists.txt b/ReflectionTemplateLib/detail/src/CMakeLists.txt index d7be430f..da4ba808 100644 --- a/ReflectionTemplateLib/detail/src/CMakeLists.txt +++ b/ReflectionTemplateLib/detail/src/CMakeLists.txt @@ -9,6 +9,7 @@ set(LOCAL_SOURCES SET(LOCAL_HEADERS + "${PROJECT_SOURCE_DIR}/detail/inc/LambdaFunction.h" "${PROJECT_SOURCE_DIR}/detail/inc/CallReflector.h" "${PROJECT_SOURCE_DIR}/detail/inc/CxxReflection.h" "${PROJECT_SOURCE_DIR}/detail/inc/FunctionCaller.h" From ded495c9eb11baf956f85f80f9b2e2f4a744ad54 Mon Sep 17 00:00:00 2001 From: neeraj Date: Sun, 7 Sep 2025 16:46:22 +0530 Subject: [PATCH 3/4] refactor --- RTLBenchmarkApp/src/BenchMark.cpp | 7 ++-- RTLBenchmarkApp/src/BenchMark.h | 33 +++++++++---------- .../detail/inc/LambdaFunction.h | 8 ++--- 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/RTLBenchmarkApp/src/BenchMark.cpp b/RTLBenchmarkApp/src/BenchMark.cpp index ef5822c9..260bc548 100644 --- a/RTLBenchmarkApp/src/BenchMark.cpp +++ b/RTLBenchmarkApp/src/BenchMark.cpp @@ -118,15 +118,16 @@ namespace rtl_bench void BenchMark::BM_LambdaFunc(benchmark::State& state) { - static rtl::detail::LambdaFunction obj; - + static rtl::detail::LambdaFunction obj; + static str_type str = std::string_view(g_longStr.c_str()); static auto _ = []() { obj.init(getMessage); return 0; }(); for (auto _ : state) { - benchmark::DoNotOptimize(obj(g_longStr)); + + benchmark::DoNotOptimize(obj(str)); } } } diff --git a/RTLBenchmarkApp/src/BenchMark.h b/RTLBenchmarkApp/src/BenchMark.h index a79f7a2e..447ca6f9 100644 --- a/RTLBenchmarkApp/src/BenchMark.h +++ b/RTLBenchmarkApp/src/BenchMark.h @@ -4,8 +4,6 @@ #include "RTLibInterface.h" -#include - #if defined(_MSC_VER) # define NOINLINE __declspec(noinline) #elif defined(__GNUC__) @@ -14,44 +12,43 @@ # define NOINLINE #endif -using str_type = std::string; //*/ std::string_view; +using str_type = /*std::string; //*/ std::string_view; namespace rtl_bench { static std::optional g_msg; NOINLINE static void sendMessage(str_type pMsg) { - std::string result = pMsg + pMsg; - result = result + result; - result = result + result; + // std::string result = pMsg + pMsg; + // result = result + result; + // result = result + result; g_msg = pMsg; } NOINLINE static str_type getMessage(str_type pMsg) { - std::string result = pMsg + pMsg; - result = result + result; - result = result + result; + // std::string result = pMsg + pMsg; + // result = result + result; + // result = result + result; g_msg = pMsg; - return str_type(pMsg); + return str_type(g_msg->c_str()); } struct Node { NOINLINE void sendMessage(str_type pMsg) { - std::string result = pMsg + pMsg; - result = result + result; - result = result + result; - g_msg = pMsg; + // std::string result = pMsg + pMsg; + // result = result + result; + // result = result + result; g_msg = pMsg; } NOINLINE str_type getMessage(str_type pMsg) { - std::string result = pMsg + pMsg; - result = result + result; - result = result + result; + // std::string result = pMsg + pMsg; + // result = result + result; + // result = result + result; g_msg = pMsg; - return pMsg; + return str_type(g_msg->c_str()); } }; diff --git a/ReflectionTemplateLib/detail/inc/LambdaFunction.h b/ReflectionTemplateLib/detail/inc/LambdaFunction.h index 1b1f3845..14413017 100644 --- a/ReflectionTemplateLib/detail/inc/LambdaFunction.h +++ b/ReflectionTemplateLib/detail/inc/LambdaFunction.h @@ -4,10 +4,10 @@ namespace rtl::detail { - template + template struct LambdaFunction { - using Invoker = std::string(*)(void* , _signature&...); + using Invoker = _retT(*)(void* , _signature&...); Invoker m_invoker = nullptr; void* m_storage = nullptr; @@ -26,14 +26,14 @@ namespace rtl::detail static auto holder = Holder{ pFunctor }; m_storage = &holder; - m_invoker = +[](void* stor, _signature&... params) -> std::string { + m_invoker = +[](void* stor, _signature&... params) -> _retT { auto h = static_cast(stor); return (h->m_functor)(params...); }; } - std::string operator()(_signature&... params) + _retT operator()(_signature&... params) { return m_invoker(m_storage, params...); } From 52b5fb7708feb47c0ca5d85bcfeaa7677b90678b Mon Sep 17 00:00:00 2001 From: neeraj31285 Date: Sun, 7 Sep 2025 18:11:46 +0530 Subject: [PATCH 4/4] cleanup. --- RTLBenchmarkApp/src/BenchMark.cpp | 30 -------------- RTLBenchmarkApp/src/BenchMark.h | 14 +++---- RTLBenchmarkApp/src/main.cpp | 3 -- .../detail/inc/LambdaFunction.h | 41 ------------------- .../detail/src/CMakeLists.txt | 1 - 5 files changed, 5 insertions(+), 84 deletions(-) delete mode 100644 ReflectionTemplateLib/detail/inc/LambdaFunction.h diff --git a/RTLBenchmarkApp/src/BenchMark.cpp b/RTLBenchmarkApp/src/BenchMark.cpp index ef5822c9..a18759e0 100644 --- a/RTLBenchmarkApp/src/BenchMark.cpp +++ b/RTLBenchmarkApp/src/BenchMark.cpp @@ -102,36 +102,6 @@ namespace rtl_bench } -namespace rtl_bench -{ - void BenchMark::BM_FunctionCall(benchmark::State& state) - { - static std::function getMsg = [](const str_type& pMsg) { - return getMessage(pMsg); - }; - - for (auto _ : state) - { - benchmark::DoNotOptimize(getMsg(g_longStr)); - } - } - - void BenchMark::BM_LambdaFunc(benchmark::State& state) - { - static rtl::detail::LambdaFunction obj; - - static auto _ = []() { - obj.init(getMessage); - return 0; - }(); - - for (auto _ : state) { - benchmark::DoNotOptimize(obj(g_longStr)); - } - } -} - - namespace rtl_bench { void BenchMark::reflectedCall_noReturn(benchmark::State& state) diff --git a/RTLBenchmarkApp/src/BenchMark.h b/RTLBenchmarkApp/src/BenchMark.h index a79f7a2e..f009aa6a 100644 --- a/RTLBenchmarkApp/src/BenchMark.h +++ b/RTLBenchmarkApp/src/BenchMark.h @@ -14,21 +14,21 @@ # define NOINLINE #endif -using str_type = std::string; //*/ std::string_view; +using str_type = /*std::string; //*/ std::string_view; namespace rtl_bench { static std::optional g_msg; NOINLINE static void sendMessage(str_type pMsg) { - std::string result = pMsg + pMsg; + std::string result = std::string(pMsg) + std::string(pMsg); result = result + result; result = result + result; g_msg = pMsg; } NOINLINE static str_type getMessage(str_type pMsg) { - std::string result = pMsg + pMsg; + std::string result = std::string(pMsg) + std::string(pMsg); result = result + result; result = result + result; g_msg = pMsg; @@ -38,7 +38,7 @@ namespace rtl_bench struct Node { NOINLINE void sendMessage(str_type pMsg) { - std::string result = pMsg + pMsg; + std::string result = std::string(pMsg) + std::string(pMsg); result = result + result; result = result + result; g_msg = pMsg; @@ -47,7 +47,7 @@ namespace rtl_bench NOINLINE str_type getMessage(str_type pMsg) { - std::string result = pMsg + pMsg; + std::string result = std::string(pMsg) + std::string(pMsg); result = result + result; result = result + result; g_msg = pMsg; @@ -95,9 +95,5 @@ namespace rtl_bench static void reflectedCall_withReturn(benchmark::State& state); static void reflectedMethodCall_withReturn(benchmark::State& state); - - static void BM_FunctionCall(benchmark::State& state); - - static void BM_LambdaFunc(benchmark::State& state); }; } \ No newline at end of file diff --git a/RTLBenchmarkApp/src/main.cpp b/RTLBenchmarkApp/src/main.cpp index e074a5db..673364f8 100644 --- a/RTLBenchmarkApp/src/main.cpp +++ b/RTLBenchmarkApp/src/main.cpp @@ -17,7 +17,4 @@ BENCHMARK(rtl_bench::BenchMark::stdFunctionCall_withReturn); BENCHMARK(rtl_bench::BenchMark::reflectedCall_withReturn); BENCHMARK(rtl_bench::BenchMark::reflectedMethodCall_withReturn); -BENCHMARK(rtl_bench::BenchMark::BM_LambdaFunc); -BENCHMARK(rtl_bench::BenchMark::BM_FunctionCall); - BENCHMARK_MAIN(); diff --git a/ReflectionTemplateLib/detail/inc/LambdaFunction.h b/ReflectionTemplateLib/detail/inc/LambdaFunction.h deleted file mode 100644 index 1b1f3845..00000000 --- a/ReflectionTemplateLib/detail/inc/LambdaFunction.h +++ /dev/null @@ -1,41 +0,0 @@ -#pragma once - -#include "RObjectBuilder.hpp" - -namespace rtl::detail -{ - template - struct LambdaFunction - { - using Invoker = std::string(*)(void* , _signature&...); - - Invoker m_invoker = nullptr; - void* m_storage = nullptr; - - template - void init(_returnType(*pFunctor)(_signature...)) - { - struct Holder { - - using Functor = decltype(pFunctor); - Functor m_functor; - - Holder(Functor pFptr) : m_functor(pFptr) { } - }; - - static auto holder = Holder{ pFunctor }; - m_storage = &holder; - - m_invoker = +[](void* stor, _signature&... params) -> std::string { - - auto h = static_cast(stor); - return (h->m_functor)(params...); - }; - } - - std::string operator()(_signature&... params) - { - return m_invoker(m_storage, params...); - } - }; -} \ No newline at end of file diff --git a/ReflectionTemplateLib/detail/src/CMakeLists.txt b/ReflectionTemplateLib/detail/src/CMakeLists.txt index da4ba808..d7be430f 100644 --- a/ReflectionTemplateLib/detail/src/CMakeLists.txt +++ b/ReflectionTemplateLib/detail/src/CMakeLists.txt @@ -9,7 +9,6 @@ set(LOCAL_SOURCES SET(LOCAL_HEADERS - "${PROJECT_SOURCE_DIR}/detail/inc/LambdaFunction.h" "${PROJECT_SOURCE_DIR}/detail/inc/CallReflector.h" "${PROJECT_SOURCE_DIR}/detail/inc/CxxReflection.h" "${PROJECT_SOURCE_DIR}/detail/inc/FunctionCaller.h"