diff options
author | Pavel Labath <pavelo@centrum.sk> | 2011-07-12 12:16:32 (GMT) |
---|---|---|
committer | Pavel Labath <pavelo@centrum.sk> | 2011-07-12 12:16:32 (GMT) |
commit | d03f47e861140e93e7edea61e6276bc22b406559 (patch) | |
tree | bfd12e07377810c8d05ca4a7d6cc12451dadd816 /src/FbTk/Resource.hh | |
parent | 881aa0d8fbda2b3198a8e47a317794663af3c2e1 (diff) | |
download | fluxbox_pavel-d03f47e861140e93e7edea61e6276bc22b406559.zip fluxbox_pavel-d03f47e861140e93e7edea61e6276bc22b406559.tar.bz2 |
Enable the resource traits classes to hold non-static members
ps: the Resource class inherits from the Traits class instead of holding it as a member because
it's more size-efficient (base classes can have zero size, members cannot).
Diffstat (limited to 'src/FbTk/Resource.hh')
-rw-r--r-- | src/FbTk/Resource.hh | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/FbTk/Resource.hh b/src/FbTk/Resource.hh index 32d24b6..c6f12d6 100644 --- a/src/FbTk/Resource.hh +++ b/src/FbTk/Resource.hh | |||
@@ -188,19 +188,21 @@ private: | |||
188 | * If there is no traits class for your type, you have to implement one. | 188 | * If there is no traits class for your type, you have to implement one. |
189 | */ | 189 | */ |
190 | template <typename T, typename Traits> | 190 | template <typename T, typename Traits> |
191 | class Resource:public Resource_base, public Accessor<T> { | 191 | class Resource:public Resource_base, public Accessor<T>, private Traits { |
192 | public: | 192 | public: |
193 | typedef T Type; | 193 | typedef T Type; |
194 | 194 | ||
195 | Resource(ResourceManager_base &rm, T val, const std::string &name, const std::string &altname): | 195 | Resource(ResourceManager_base &rm, T val, const std::string &name, |
196 | Resource_base(name, altname), m_value(val), m_defaultval(val), m_rm(rm) { | 196 | const std::string &altname, const Traits &traits = Traits() ): |
197 | Resource_base(name, altname), Traits(traits), m_value(val), m_defaultval(val), m_rm(rm) { | ||
197 | m_rm.addResource(*this); // add this to resource handler | 198 | m_rm.addResource(*this); // add this to resource handler |
198 | } | 199 | } |
199 | 200 | ||
200 | // LResourceManager does not use altname, so we provide a constructor which initializes | 201 | // LResourceManager does not use altname, so we provide a constructor which initializes |
201 | // altname to name | 202 | // altname to name |
202 | Resource(ResourceManager_base &rm, T val, const std::string &name): | 203 | Resource(ResourceManager_base &rm, T val, const std::string &name, |
203 | Resource_base(name, name), m_value(val), m_defaultval(val), m_rm(rm) { | 204 | const Traits &traits = Traits() ): |
205 | Resource_base(name, name), Traits(traits), m_value(val), m_defaultval(val), m_rm(rm) { | ||
204 | m_rm.addResource(*this); // add this to resource handler | 206 | m_rm.addResource(*this); // add this to resource handler |
205 | } | 207 | } |
206 | virtual ~Resource() { | 208 | virtual ~Resource() { |