From 1302b6a2388d466064363067ec428166a1488670 Mon Sep 17 00:00:00 2001 From: samcake Date: Wed, 14 Oct 2015 10:47:49 -0700 Subject: [PATCH] Improving the Factory registration --- .../controllers/src/controllers/Filter.h | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/libraries/controllers/src/controllers/Filter.h b/libraries/controllers/src/controllers/Filter.h index 425bba7512..4d21966731 100644 --- a/libraries/controllers/src/controllers/Filter.h +++ b/libraries/controllers/src/controllers/Filter.h @@ -75,24 +75,30 @@ namespace controller { class Entry { public: virtual Filter* create() = 0; - + virtual const std::string& getName() const = 0; + Entry() = default; virtual ~Entry() = default; }; - template class ClassEntry { + template class ClassEntry { public: - virtual Filter* create() { return (Filter*) new T(); } + Filter* create() override { return (Filter*) new T(); } + const std::string& getName() const override { + return _name + }; - ClassEntry() = default; + ClassEntry() : _name(name) {}; virtual ~ClassEntry() = default; + + const std::string _name; }; using EntryMap = std::map>; - void registerEntry(const std::string& name, const std::shared_ptr& entry) { + void registerEntry(const std::shared_ptr& entry) { if (entry) { - _entries.insert(EntryMap::value_type(name, entry)); + _entries.insert(EntryMap::value_type(entry->getName(), entry)); } } @@ -115,7 +121,9 @@ namespace controller { }; } -#define REGISTER_FILTER_CLASS(classEntry) static Filter::Factory::ClassEntry _factoryEntry; +#define REGISTER_FILTER_CLASS(classEntry, className) \ + using FactoryEntry = Filter::Factory::ClassEntry;\ + static FactoryEntry _factoryEntry; namespace controller { @@ -150,7 +158,8 @@ namespace controller { } virtual bool parseParameters(const QJsonArray& parameters); - REGISTER_FILTER_CLASS(ScaleFilter); + // static Filter::Factory::ClassEntry _factoryEntry; + REGISTER_FILTER_CLASS(ScaleFilter, "scale"); private: float _scale = 1.0f; };