This commit is contained in:
2026-07-15 15:38:31 +03:00
parent bdaaaab559
commit 433f38b5a7
2 changed files with 19 additions and 5 deletions

View File

@@ -14,14 +14,20 @@ int main()
AdcGenericDevice<> dev("DEV#1"); AdcGenericDevice<> dev("DEV#1");
std::println("add RW-attr with id='{}' (val={})", id1, i); std::println("add arith RW-attr with id='{}' (val={})", id1, i);
dev.addAttr( dev.addArithAttr(
id1, [&i]() -> adc_result_t<int> { return i; }, id1, [&i]() -> adc_result_t<int> { return i; },
[&i](int ii) -> adc_error_t { [&i](int ii) -> adc_error_t {
i = ii; i = ii;
return AdcDeviceErrorCode::ERROR_OK; return AdcDeviceErrorCode::ERROR_OK;
}, });
std::tuple<double, int, long>{}); // dev.addAttr(
// id1, [&i]() -> adc_result_t<int> { return i; },
// [&i](int ii) -> adc_error_t {
// i = ii;
// return AdcDeviceErrorCode::ERROR_OK;
// },
// std::tuple<double, int, long>{});
std::println("add RO-attr with id='{}' (val={})", id2, d); std::println("add RO-attr with id='{}' (val={})", id2, d);
dev.addAttr(id2, [&d]() -> adc_result_t<double> { return d; }, nullptr); dev.addAttr(id2, [&d]() -> adc_result_t<double> { return d; }, nullptr);

View File

@@ -283,7 +283,7 @@ public:
float, float,
double, double,
long double> long double>
arithmetic_t{}; arithmetic_types{};
typedef DEV_ID_T device_id_t; typedef DEV_ID_T device_id_t;
typedef ATTR_ID_T attr_id_t; typedef ATTR_ID_T attr_id_t;
@@ -326,6 +326,14 @@ public:
std::tuple<attr_t<VTs>...>{}); std::tuple<attr_t<VTs>...>{});
} }
// add attribute of one of arithmetic type
template <typename GT, typename ST>
requires std::is_arithmetic_v<snplib_attr_value_deduced_t<GT, ST>>
void addArithAttr(ATTR_ID_T id, GT&& getter, ST&& setter)
{
addAttr(std::move(id), std::forward<GT>(getter), std::forward<ST>(setter), AdcGenericDevice::arithmetic_types);
}
adc_error_t operator()(CMD_ID_T id) adc_error_t operator()(CMD_ID_T id)
{ {
if (auto it = _commands.find(id); it != _commands.end()) { if (auto it = _commands.find(id); it != _commands.end()) {