Steve, std::function has constructors that accept function pointers, or NULL to create an empty function object. std::function of course has a little overhead over a simple pointer. But that overhead isn't relevant for this use case. In fact, we use std::function already in places that are more performance & memory sensitive. See: https://www.boost.org/doc/libs/1_45_0/doc/html/function/misc.html Regards, Michael Am 11.09.20 um 23:31 schrieb Stephen Casner:
Michael,
Like Mark, I did not think the change would be simple. I've used functional objects before, but was not aware of std::function. I am still not quite sure how a vanilla function pointer matches this type; I need to think about that more carefully.
Having the typedefs is a good idea even if we weren't using std:function.
-- Steve
On Fri, 11 Sep 2020, Michael Balzer wrote:
Mark,
Am 11.09.20 um 18:11 schrieb Michael Balzer:
I agree it is not necessary; my suggestion is purely to clean it up and enhance functionality. The problem at the moment is that OvmsCommand execute callbacks can only be to function callbacks (not objects). It doesn't even use the c++ bind function callback mechanism (like notification, etc, for example). It is what it is, and changing now is very hard. That slipped my attention, but upgrading OvmsCommand to accept any function type should be simply changing m_execute and m_validate to std::function, or do I miss something? Just did this locally, works perfectly. Shall I push the change or have you begun working on ovms_command?
If so, it's really just exchanging the function signatures for these types:
typedef std::function<void(int, OvmsWriter*, OvmsCommand*, int, const char* const*)> OvmsCommandExecuteCallback_t; typedef std::function<int(OvmsWriter*, OvmsCommand*, int, const char* const*, bool)> OvmsCommandValidateCallback_t;
Patch attached.
Regards, Michael
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26