...
This commit is contained in:
parent
ca46e89536
commit
c21490091d
@ -42,8 +42,8 @@ concept adc_input_char_range = std::ranges::input_range<R>;
|
||||
|
||||
|
||||
// deduce returned type of callable
|
||||
template <typename T>
|
||||
using adc_retval_t = std::invoke_result_t<std::remove_cvref_t<T>>;
|
||||
// template <typename T>
|
||||
// using adc_retval_t = std::invoke_result_t<std::remove_cvref_t<T>>;
|
||||
|
||||
|
||||
// helper classes
|
||||
@ -87,10 +87,16 @@ struct adc_func_traits<R (C::*)(Args...) const> : adc_func_traits_helper_t<R, Ar
|
||||
};
|
||||
|
||||
template <typename F>
|
||||
struct adc_func_traits : adc_func_traits<decltype(&F::operator())> {
|
||||
struct adc_func_traits : adc_func_traits<decltype(&std::remove_reference_t<F>::operator())> {
|
||||
};
|
||||
|
||||
|
||||
template <typename T>
|
||||
using adc_retval_t = typename adc_func_traits<T>::ret_t;
|
||||
|
||||
template <typename T>
|
||||
using adc_func_arg1_t = typename adc_func_traits<T>::arg1_t;
|
||||
|
||||
// deduce type
|
||||
template <typename T>
|
||||
using adc_deduced_type =
|
||||
|
||||
@ -245,8 +245,8 @@ public:
|
||||
|
||||
template <typename FromFuncT, typename ToFuncT>
|
||||
AdcValueHolder& addConvertFunc(FromFuncT&& func_from_internal, ToFuncT&& func_to_internal)
|
||||
// requires std::invocable<FromFuncT, std::remove_cvref_t<traits::adc_retval_t<ToFuncT>>> &&
|
||||
// std::invocable<ToFuncT, std::remove_cvref_t<traits::adc_retval_t<FromFuncT>>>
|
||||
requires std::invocable<FromFuncT, std::remove_cvref_t<traits::adc_retval_t<ToFuncT>>> &&
|
||||
std::invocable<ToFuncT, std::remove_cvref_t<traits::adc_retval_t<FromFuncT>>>
|
||||
{
|
||||
using from_sig_t = typename traits::adc_func_traits<FromFuncT>;
|
||||
using to_sig_t = typename traits::adc_func_traits<ToFuncT>;
|
||||
@ -266,10 +266,10 @@ public:
|
||||
|
||||
_getterFunc<user_t>[this] = [wrapper = traits::adc_pf_wrapper(std::forward<FromFuncT>(func_from_internal)),
|
||||
this]() {
|
||||
if (_getterFunc<value_t>[this]) {
|
||||
auto val = _getterFunc<value_t>[this]();
|
||||
// return std::get<0>(wrapper)(val); // convert from internal type
|
||||
return std::get<0>(wrapper)(_getterFunc<value_t>[this]()); // convert from internal type
|
||||
auto& getter = _getterFunc<value_t>[this];
|
||||
if (getter) {
|
||||
auto val = getter();
|
||||
return std::get<0>(wrapper)(val); // convert from internal type
|
||||
}
|
||||
// invalid conversion function signature
|
||||
throw std::system_error(AdcValueHolderErrorCode::ERROR_INTERNAL_TYPE_MISMATCH);
|
||||
@ -279,8 +279,9 @@ public:
|
||||
_setterFunc<user_t>[this] = [wrapper = traits::adc_pf_wrapper(std::forward<ToFuncT>(func_to_internal)),
|
||||
this](const user_t& val) {
|
||||
value_t value = std::get<0>(wrapper)(val); // convert to internal type
|
||||
if (_setterFunc<value_t>[this]) {
|
||||
_setterFunc<value_t>[this](value);
|
||||
auto& setter = _setterFunc<value_t>[this];
|
||||
if (setter) {
|
||||
setter(value);
|
||||
} else {
|
||||
// invalid conversion function signature
|
||||
throw std::system_error(AdcValueHolderErrorCode::ERROR_INTERNAL_TYPE_MISMATCH);
|
||||
|
||||
@ -76,9 +76,8 @@ TEST_CASE("[ADC VALUEHOLDER]")
|
||||
// v = sval->c_str();
|
||||
// });
|
||||
|
||||
|
||||
vsh.addConvertFunc([&str](const std::string&) { return str.c_str(); },
|
||||
[](const char* v) { return std::string(v); });
|
||||
auto lls = [](const char* v) { return std::string(v); };
|
||||
vsh.addConvertFunc([&str](const std::string&) { return str.c_str(); }, lls);
|
||||
|
||||
vsh = "NEW VALUE";
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user