From 90c366f369cec69468e5a05518f7e4b57ed56dc2 Mon Sep 17 00:00:00 2001 From: FengShun Date: Mon, 26 Oct 2020 17:29:00 +0800 Subject: [PATCH] uORB::Publication*: template parameter automatically obtains the queue size according to the type --- src/modules/uORB/Publication.hpp | 20 +++++++++++++++++++- src/modules/uORB/PublicationMulti.hpp | 2 +- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/modules/uORB/Publication.hpp b/src/modules/uORB/Publication.hpp index 90f98603ba..0f2256af0a 100644 --- a/src/modules/uORB/Publication.hpp +++ b/src/modules/uORB/Publication.hpp @@ -48,6 +48,24 @@ namespace uORB { +template class DefaultQueueSize +{ +private: + template + static constexpr uint8_t get_queue_size(decltype(T::ORB_QUEUE_LENGTH) *) + { + return T::ORB_QUEUE_LENGTH; + } + + template static constexpr uint8_t get_queue_size(...) + { + return 1; + } + +public: + static constexpr unsigned value = get_queue_size(nullptr); +}; + class PublicationBase { public: @@ -79,7 +97,7 @@ protected: /** * uORB publication wrapper class */ -template +template::value> class Publication : public PublicationBase { public: diff --git a/src/modules/uORB/PublicationMulti.hpp b/src/modules/uORB/PublicationMulti.hpp index e54afd7365..b4aafe4e9a 100644 --- a/src/modules/uORB/PublicationMulti.hpp +++ b/src/modules/uORB/PublicationMulti.hpp @@ -50,7 +50,7 @@ namespace uORB /** * Base publication multi wrapper class */ -template +template::value> class PublicationMulti : public PublicationBase { public: