This commit is contained in:
Timur A. Fatkhullin
2024-04-13 23:47:22 +03:00
parent 53779d2f13
commit ca46e89536
3 changed files with 33 additions and 9 deletions

View File

@@ -8,7 +8,6 @@
#include <functional>
#include <map>
#include <system_error>
#include "adc_traits.h"
@@ -251,8 +250,10 @@ public:
{
using from_sig_t = typename traits::adc_func_traits<FromFuncT>;
using to_sig_t = typename traits::adc_func_traits<ToFuncT>;
using value_t = typename to_sig_t::ret_t; // internal value type
using user_t = typename from_sig_t::ret_t;
// using value_t = typename to_sig_t::ret_t; // internal value type
using value_t = std::remove_cv_t<typename to_sig_t::ret_t>; // internal value type
// using user_t = typename from_sig_t::ret_t;
using user_t = std::remove_cv_t<typename from_sig_t::ret_t>;
// static_assert(!std::is_same_v<value_t, void>, "void IS NOT VALID TYPE!!!");
@@ -267,7 +268,8 @@ public:
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)(val); // convert from internal type
return std::get<0>(wrapper)(_getterFunc<value_t>[this]()); // convert from internal type
}
// invalid conversion function signature
throw std::system_error(AdcValueHolderErrorCode::ERROR_INTERNAL_TYPE_MISMATCH);
@@ -307,12 +309,14 @@ public:
AdcValueHolder& operator=(UT&& value)
{
// using v_t = std::remove_reference_t<UT>;
using v_t = std::remove_cvref_t<UT>;
using val_t = std::conditional_t<std::is_array_v<v_t>, std::add_pointer_t<std::remove_extent_t<v_t>>, v_t>;
// using v_t = std::remove_cvref_t<UT>;
// using val_t = std::conditional_t<std::is_array_v<v_t>, std::add_pointer_t<std::remove_extent_t<v_t>>, v_t>;
using val_t = std::decay_t<UT>;
auto setter = _setterFunc<val_t>[this];
if (setter) {
setter(std::forward<UT>(value));
// setter(std::forward<UT>(value));
setter(value);
} else {
throw std::system_error(AdcValueHolderErrorCode::ERROR_NO_CONV_FUNC);
}