📄 main.cxx
字号:
#include <ptlib.h>
#include <ptclib/http.h>
#include <ptclib/ptts.h>
#include <ptclib/pwavfile.h>
#include "abstract.h"
class Factory : public PProcess
{
public:
Factory()
: PProcess() { }
void Main();
};
PCREATE_PROCESS(Factory)
template <class BaseClass, class TypeClass = PString>
class Display
{
public:
static void ConcreteTypes(const char * title)
{
cout << "\nConcrete types for " << title << ':' << endl;
typename PFactory<BaseClass, TypeClass>::KeyList_T keys = PFactory<BaseClass, TypeClass>::GetKeyList();
typename PFactory<BaseClass, TypeClass>::KeyList_T::const_iterator r;
for (r = keys.begin(); r != keys.end(); ++r)
cout << " " << *r << endl;
cout << endl;
}
static void TestFactory()
{
typename PFactory<BaseClass, TypeClass>::KeyList_T keyList = PFactory<BaseClass, TypeClass>::GetKeyList();
unsigned i;
for (i = 0; i < keyList.size(); i++) {
for (int j = 0; j < 3; j++)
{
MyAbstractClass * c = PFactory<BaseClass, TypeClass>::CreateInstance(keyList[i]);
if (c == NULL)
cout << "Cannot instantiate class " << keyList[i] << endl;
else
cout << keyList[i] << "::Function returned \"" << c->Function() << "\", instance " << (void *)c << endl;
}
}
}
};
void Factory::Main()
{
Display<MyAbstractClass>::ConcreteTypes("MyAbstractClass by PString");
Display<MyAbstractClass>::TestFactory();
Display<MyAbstractClass, unsigned>::ConcreteTypes("MyAbstractClass by unsigned");
Display<MyAbstractClass, unsigned>::TestFactory();
Display<PURLScheme>::ConcreteTypes("PURLScheme");
Display<PTextToSpeech>::ConcreteTypes("PTextToSpeech");
Display<PPluginModuleManager>::ConcreteTypes("PPluginModuleManager");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -