diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleLogging.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleLogging.cpp index 8bcf8338726c29094ada9aa81cc74a69812b7150..0ed1a250ab31b69f64afd236ad20462aab05fc95 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleLogging.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleLogging.cpp @@ -577,8 +577,7 @@ namespace armarx::RobotUnitModule //dimensions of sensor value (e.g. vel, tor, f_x, f_y, ...) for (std::size_t idxField = 0; idxField < val->getNumberOfDataFields(); ++ idxField) { - std::string str; - val->getDataFieldAs(idxField, str); + const auto str = val->getDataFieldAs<std::string>(idxField); for (auto& [_, entry] : rtLoggingEntries) { if (entry->loggedSensorDeviceValues.at(idxDev).at(idxField)) diff --git a/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValueBase.h b/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValueBase.h index 18d537b291f6c204036ec14e467a92e9660144df..7afa43be267682cfd23bf38eccf073b54f6cdca3 100644 --- a/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValueBase.h +++ b/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValueBase.h @@ -99,6 +99,14 @@ namespace armarx virtual void getDataFieldAs(std::size_t i, Ice::Float& out) const = 0; virtual void getDataFieldAs(std::size_t i, Ice::Double& out) const = 0; virtual void getDataFieldAs(std::size_t i, std::string& out) const = 0; + template<class T> + T getDataFieldAs(std::size_t i) const + { + ARMARX_TRACE; + T t; + this->getDataFieldAs(i, t); + return t; + } virtual const std::type_info& getDataFieldType(std::size_t i) const = 0; //management functions diff --git a/source/RobotAPI/components/units/RobotUnit/util/introspection/DataFieldsInfo.h b/source/RobotAPI/components/units/RobotUnit/util/introspection/DataFieldsInfo.h index 49e77ca8b8afb43e7308a8e53316c297fb283e4e..015f386b6e752380c4e5b07e1867d9b2e30ac894 100644 --- a/source/RobotAPI/components/units/RobotUnit/util/introspection/DataFieldsInfo.h +++ b/source/RobotAPI/components/units/RobotUnit/util/introspection/DataFieldsInfo.h @@ -325,7 +325,8 @@ namespace armarx::introspection static void GetDataFieldAs(std::size_t i, const std::array<T, N>& field, OT& out) { ARMARX_CHECK_LESS(i, GetNumberOfFields()); - sub_t::GetDataFieldAs(i % N, field.at(i / N), out); + const auto subN = sub_t::GetNumberOfFields(); + sub_t::GetDataFieldAs(i % subN, field.at(i / subN), out); } static const std::type_info& GetDataFieldType(std::size_t i)