2013-09-29 01:08:15 +02:00
|
|
|
|
|
|
|
|
#include "lib/error.hpp"
|
|
|
|
|
|
2013-09-30 00:58:39 +02:00
|
|
|
#include "lib/singleton-subclass.hpp"
|
|
|
|
|
|
2013-09-29 01:08:15 +02:00
|
|
|
|
|
|
|
|
namespace test {
|
|
|
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
|
struct Holder
|
|
|
|
|
{
|
|
|
|
|
static T* instance;
|
|
|
|
|
|
|
|
|
|
T&
|
|
|
|
|
get()
|
|
|
|
|
{
|
|
|
|
|
if (!instance)
|
|
|
|
|
{
|
|
|
|
|
instance = new T();
|
|
|
|
|
}
|
|
|
|
|
return *instance;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
|
T* Holder<T>::instance;
|
|
|
|
|
|
|
|
|
|
struct Subject
|
|
|
|
|
{
|
|
|
|
|
static int cnt;
|
|
|
|
|
|
|
|
|
|
Subject();
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
2013-09-30 02:09:31 +02:00
|
|
|
typedef lib::SingletonSub<Subject> Factory;
|
|
|
|
|
|
|
|
|
|
extern Factory fab;
|
|
|
|
|
|
2013-09-30 00:58:39 +02:00
|
|
|
|
2013-09-29 01:08:15 +02:00
|
|
|
|
2013-09-30 00:58:39 +02:00
|
|
|
Subject& fabricate();
|
2013-09-29 01:08:15 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-09-30 00:42:27 +02:00
|
|
|
} // namespace test
|