From 3778720cc87eacc7a8b58b924e634528ac31ebdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20=C5=81ukawski?= Date: Tue, 22 Aug 2023 19:33:37 +0200 Subject: [PATCH] Embrace `std::invoke` (C++17) --- libraries/YarpDeviceMapperLib/DeviceMapper.hpp | 3 ++- libraries/YarpDeviceMapperLib/FutureTask.hpp | 2 +- libraries/YarpPlugins/CanBusControlboard/IPidControlImpl.cpp | 4 +++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/libraries/YarpDeviceMapperLib/DeviceMapper.hpp b/libraries/YarpDeviceMapperLib/DeviceMapper.hpp index 960f6d2d1..ae10ff627 100644 --- a/libraries/YarpDeviceMapperLib/DeviceMapper.hpp +++ b/libraries/YarpDeviceMapperLib/DeviceMapper.hpp @@ -3,6 +3,7 @@ #ifndef __DEVICE_MAPPER_HPP__ #define __DEVICE_MAPPER_HPP__ +#include // std::invoke #include #include #include @@ -173,7 +174,7 @@ class DeviceMapper final { auto [device, offset] = getDevice(j); T * p = device->getHandle(); - return p ? (p->*fn)(offset, ref...) : false; + return p ? std::invoke(fn, p, offset, ref...) : false; } //! Alias for a full-joint command. See class description. diff --git a/libraries/YarpDeviceMapperLib/FutureTask.hpp b/libraries/YarpDeviceMapperLib/FutureTask.hpp index e4584b432..227e3ed04 100644 --- a/libraries/YarpDeviceMapperLib/FutureTask.hpp +++ b/libraries/YarpDeviceMapperLib/FutureTask.hpp @@ -31,7 +31,7 @@ class FutureTask //! Register a deferred callback given a generic class instance. template void add(T * p, Fn && fn, Args &&... args) - { deferreds.push_back([=](int) { return (p->*fn)(args...); }); } + { deferreds.push_back([=](int) { return std::invoke(fn, p, args...); }); } //! Dispatch the registered callbacks and returns their joint result. virtual bool dispatch() = 0; diff --git a/libraries/YarpPlugins/CanBusControlboard/IPidControlImpl.cpp b/libraries/YarpPlugins/CanBusControlboard/IPidControlImpl.cpp index db0f4ed57..1d65d1785 100644 --- a/libraries/YarpPlugins/CanBusControlboard/IPidControlImpl.cpp +++ b/libraries/YarpPlugins/CanBusControlboard/IPidControlImpl.cpp @@ -2,6 +2,8 @@ #include "CanBusControlboard.hpp" +#include // std::invoke + #include #include @@ -21,7 +23,7 @@ namespace { auto [device, offset] = dm.getDevice(j); auto * p = device->getHandle(); - return p && (p->*fn)(type, offset, ref...); + return p && std::invoke(fn, p, type, offset, ref...); } template