Changed Singleton Dependency macro and tweaked DM

This commit is contained in:
Atlante45 2014-12-18 15:42:03 -08:00
parent 9c038d33b9
commit f2847cec06

View file

@ -16,27 +16,23 @@
#include <typeinfo> #include <typeinfo>
#define SINGLETON_DEPENDENCY(T, NEED_SET)\ #define SINGLETON_DEPENDENCY \
public:\ private: \
typedef QSharedPointer<T> SharedPointer;\ virtual void customDeleter() { \
typedef QWeakPointer<T> WeakPointer;\ QObject* thisObject = dynamic_cast<QObject*>(this); \
private:\ if (thisObject) { \
static const bool REQUIRE_SET = NEED_SET;\ thisObject->deleteLater(); \
void customDeleter() {\ } else { \
QObject* thisObject = dynamic_cast<QObject*>(this);\ delete this; \
if (thisObject) {\ } \
thisObject->deleteLater();\ } \
} else {\
delete this;\
}\
}\
friend class DependencyManager; friend class DependencyManager;
class QObject; class QObject;
// usage: // usage:
// T* instance = DependencyManager::get<T>(); // T* instance = DependencyManager::get<T>();
// T* instance = DependencyManager::set<T, Type1, Type2, ...>(Args... args); // T* instance = DependencyManager::set<T>(Args... args);
// T* instance = DependencyManager::destroy<T>(); // T* instance = DependencyManager::destroy<T>();
class DependencyManager { class DependencyManager {
public: public:
@ -56,12 +52,6 @@ private:
template <typename T> template <typename T>
QSharedPointer<T> DependencyManager::get() { QSharedPointer<T> DependencyManager::get() {
static bool requireSet = !T::REQUIRE_SET;
if (requireSet) {
set<T>();
requireSet = false;
}
return storage<T>(); return storage<T>();
} }