![]() |
Miam-Player
0.8.0
A nice music player
|
#include <stdio.h>
#include <string>
#include <vector>
Go to the source code of this file.
Macros | |
#define | FACTORY_REGISTER(BASE, _ID, NAME) FACTORY_REGISTER_ID_TYPE(BASE, BASE##Id_##_ID, BASE##_ID, NAME) |
A: Suppose we need a factory for class MyClass. More... | |
#define | FACTORY_REGISTER_ID_TYPE(BASE, ID, TYPE, NAME) |
#define | FACTORY_REGISTER_ID_AUTO(BASE, _ID, NAME) FACTORY_REGISTER_ID_TYPE_AUTO(BASE, BASE##Id_##_ID, BASE##_ID, NAME) |
#define | FACTORY_REGISTER_ID_MAN(BASE, _ID, NAME) FACTORY_REGISTER_ID_TYPE_MAN(BASE, BASE##Id_##_ID, BASE##_ID, NAME) |
#define | FACTORY_REGISTER_ID_TYPE_MAN(BASE, ID, TYPE, NAME) |
#define | FACTORY_REGISTER_ID_TYPE_AUTO(BASE, ID, TYPE, NAME) |
#define | FACTORY_DECLARE(T) FACTORY_DECLARE_ID(T, T##Id) |
#define | FACTORY_DECLARE_ID(T, ID) |
#define | FACTORY_DEFINE(T) FACTORY_DEFINE_ID(T, T##Id) |
#define | FACTORY_DEFINE_ID(T, ID) |
#define FACTORY_DECLARE | ( | T | ) | FACTORY_DECLARE_ID(T, T##Id) |
#define FACTORY_DECLARE_ID | ( | T, | |
ID | |||
) |
#define FACTORY_DEFINE | ( | T | ) | FACTORY_DEFINE_ID(T, T##Id) |
#define FACTORY_DEFINE_ID | ( | T, | |
ID | |||
) |
#define FACTORY_REGISTER | ( | BASE, | |
_ID, | |||
NAME | |||
) | FACTORY_REGISTER_ID_TYPE(BASE, BASE##Id_##_ID, BASE##_ID, NAME) |
A: Suppose we need a factory for class MyClass.
We can query a derived class of MyClass from factory by an id type MyClassId. To create the factory, just 2 steps
To create and register a new subclass MyClassSubA with it's id 0. In MyClassTypes.h (Usually just include this is enough to use the factory. And MyClassXXX.{h,cpp} can NOT include this file), MyClassSubA's ID: extern Q_AV_EXPORT MyClassId MyClassId_SubA; In MyClassTypes.cpp, define the id value: MyClassId MyClassId_SubA = some_value; We define the id in MyClassTypes.cpp because MyClassSubA may not be compiled(e.g. platform dependent features), but the id must be defined.
B: If MyClass and it's factory already exist in the library and you want to add a new subclass without changing the library, just create MyClassSubA.cpp with the content:
#include "MyClass.h" #include "QtAV/private/prepost.h" //for PRE_FUNC_ADD() MyClassId MyClassId_SubA = some_value; //it can be used somewhere else as "extern" FACTORY_REGISTER_ID_AUTO(MyClass, SubA, "SubA's name") void RegisterMyClassSubA_Man() //call it when you need as "extern" { FACTORY_REGISTER_ID_MAN(MyClass, SubA, "SubA's name") } class MyClassSubA : public MyClass { ... };
#define FACTORY_REGISTER_ID_AUTO | ( | BASE, | |
_ID, | |||
NAME | |||
) | FACTORY_REGISTER_ID_TYPE_AUTO(BASE, BASE##Id_##_ID, BASE##_ID, NAME) |
#define FACTORY_REGISTER_ID_MAN | ( | BASE, | |
_ID, | |||
NAME | |||
) | FACTORY_REGISTER_ID_TYPE_MAN(BASE, BASE##Id_##_ID, BASE##_ID, NAME) |
#define FACTORY_REGISTER_ID_TYPE | ( | BASE, | |
ID, | |||
TYPE, | |||
NAME | |||
) |
#define FACTORY_REGISTER_ID_TYPE_AUTO | ( | BASE, | |
ID, | |||
TYPE, | |||
NAME | |||
) |
#define FACTORY_REGISTER_ID_TYPE_MAN | ( | BASE, | |
ID, | |||
TYPE, | |||
NAME | |||
) |