add test (doctest)
This commit is contained in:
@@ -97,7 +97,8 @@ class AdcValueHolder
|
||||
{
|
||||
protected:
|
||||
template <typename T>
|
||||
using arg_t = typename traits::adc_func_traits<T>::ret_t;
|
||||
// using arg_t = typename traits::adc_func_traits<T>::ret_t;
|
||||
using arg_t = typename traits::adc_func_traits<std::remove_reference_t<T>>::ret_t;
|
||||
|
||||
std::function<void(std::any&)> _getterWrapper;
|
||||
std::function<void(const std::any&)> _setterWrapper;
|
||||
@@ -113,7 +114,7 @@ protected:
|
||||
{
|
||||
using value_t = arg_t<decltype(getter)>;
|
||||
|
||||
static_assert(std::is_same_v<value_t, void>, "THE getter MUST NOT RETURN void TYPE!!!");
|
||||
// static_assert(std::is_same_v<value_t, void>, "THE getter MUST NOT RETURN void TYPE!!!");
|
||||
|
||||
using g_t = decltype(getter);
|
||||
_getterWrapper = [wrapper = traits::adc_pf_wrapper(std::forward<g_t>(getter))](std::any& val) {
|
||||
@@ -125,7 +126,7 @@ protected:
|
||||
using vld_t = decltype(validator);
|
||||
using s_t = decltype(setter);
|
||||
|
||||
if constexpr (std::is_same_v<vld_t, decltype(AdcValueHolderDummyValidator)>) { // no validation
|
||||
if constexpr (std::is_same_v<vld_t, decltype(AdcValueHolderDummyValidator<value_t>)>) { // no validation
|
||||
_setterWrapper = [wrapper = traits::adc_pf_wrapper(std::forward<s_t>(setter)), this](const std::any& val) {
|
||||
auto& setter = std::get<0>(wrapper);
|
||||
|
||||
@@ -160,14 +161,19 @@ public:
|
||||
constexpr static std::tuple<char, short, int, long, long long, float, double> _defaultTrivialConvTypes{};
|
||||
|
||||
// always-true validator
|
||||
constexpr static auto AdcValueHolderDummyValidator = [](const auto&) { return true; };
|
||||
// constexpr static auto AdcValueHolderDummyValidator = [](const auto&) { return true; };
|
||||
template <typename VT>
|
||||
constexpr static bool AdcValueHolderDummyValidator(const VT&)
|
||||
{
|
||||
return true;
|
||||
};
|
||||
|
||||
/* CONSTRUCTORS AND DESTRUCTOR */
|
||||
|
||||
AdcValueHolder(
|
||||
std::invocable<> auto&& getter,
|
||||
std::invocable<const arg_t<decltype(getter)>&> auto&& setter,
|
||||
std::predicate<const arg_t<decltype(getter)>&> auto&& validator = AdcValueHolder::AdcValueHolderDummyValidator)
|
||||
AdcValueHolder(std::invocable<> auto&& getter,
|
||||
std::invocable<const arg_t<decltype(getter)>&> auto&& setter,
|
||||
std::predicate<const arg_t<decltype(getter)>&> auto&& validator =
|
||||
AdcValueHolder::AdcValueHolderDummyValidator<arg_t<decltype(getter)>>)
|
||||
: _internalTypeIndex(std::type_index(typeid(arg_t<decltype(getter)>)))
|
||||
{
|
||||
init(std::forward<decltype(getter)>(getter), std::forward<decltype(setter)>(setter),
|
||||
@@ -176,11 +182,11 @@ public:
|
||||
|
||||
|
||||
template <typename... Ts>
|
||||
AdcValueHolder(
|
||||
std::invocable<> auto&& getter,
|
||||
std::invocable<const arg_t<decltype(getter)>&> auto&& setter,
|
||||
const std::tuple<Ts...>& trivialConvTypes,
|
||||
std::predicate<const arg_t<decltype(getter)>&> auto&& validator = AdcValueHolder::AdcValueHolderDummyValidator)
|
||||
AdcValueHolder(std::invocable<> auto&& getter,
|
||||
std::invocable<const arg_t<decltype(getter)>&> auto&& setter,
|
||||
const std::tuple<Ts...>& trivialConvTypes,
|
||||
std::predicate<const arg_t<decltype(getter)>&> auto&& validator =
|
||||
AdcValueHolder::AdcValueHolderDummyValidator<arg_t<decltype(getter)>>)
|
||||
: AdcValueHolder(std::forward<decltype(getter)>(getter),
|
||||
std::forward<decltype(setter)>(setter),
|
||||
std::forward<decltype(validator)>(validator))
|
||||
|
||||
Reference in New Issue
Block a user