1.参照例一配置
// Shape.h
#ifndef Shape_H_INCLUDED_
#define Shape_H_INCLUDED_
#include <string>
#include "loki/Singleton.h"
#include "loki/Factory.h"
using namespace Loki;
class Shape {
public:
virtual ~Shape() {}
virtual void Draw() = 0;
};
typedef Loki::SingletonHolder<Loki::Factory<Shape,std::string >> ShapeFactory;
#define REGISTER_SHAPE(className) \
namespace { \
Shape* Create() { return new className; } \
const bool RegisterShape__ = ShapeFactory::Instance().Register( #className, Create ); \
}
#endif // Shape_H_INCLUDED_
// Line.h
#ifndef Line_H_INCLUDED_
#define Line_H_INCLUDED_
#include "Shape.h"
class Line : public Shape {
public:
virtual void Draw();
};
#endif // Line_H_INCLUDED_
// Line.cpp
#include <iostream>
#include "Line.h"
REGISTER_SHAPE( Line )
void Line::Draw() {
std::cout << "Line::Draw()" << std::endl;
}
// main.cpp
#include "Shape.h"
int main() {
Shape* line = ShapeFactory::Instance().CreateObject( "Line" );
line->Draw();
delete line;
system("PAUSE");
return 0;
}