C++工厂方法与反射的简单实现

最近下班后,闲得无聊,打算在Oracle的occi基础之上封装一个访问层,便于处理Oracle的读写操作.

打算主要参照Poco库和OTL以及DTL,利用模板和STL,tr1和log4cplus等库,实现跨平台的要求.

之后,在此基础上,参与Java的Hibernate和ibatis等技术,实现一个简单的对象持久化层.

 

最近先作了一些技术上的测试和设计工作吧

 

先贴一段C++工厂方法与反射的简单实现的实现代码

#include <iostream>

#include <memory>



using namespace std;



class Object

{

public:

	virtual bool Save() = 0;

	virtual bool Get(...) 

	{

		return false;

	}

};



class A

{

public:

	A(){}

	A( int _value )

	{

		this->value = _value;

	}

	int value;

};



#define register_class(Class)	\

class Class##Adpter : public Object, public Class	\

{	\

public:	\

	Class##Adpter(){}	\

	virtual bool Save()	\

	{	\

		return true;	\

	}	\

	static Object* createInstance()	\

{	\

	return new Class##Adpter;	\

}	\

	virtual bool Get( ... )	\

	{	\

		return true;	\

	}	\

public:	\

	Class object;	\

};



typedef shared_ptr<Object> Shared_Object;



template<class ObjType>

class ObjectFactory

{

public:

	static Shared_Object CreateInstance()

	{

		return Shared_Object(new ObjType);

	}

};



register_class(A)



int main()

{

	Shared_Object a = ObjectFactory<AAdpter>::CreateInstance();

	cout << a->Save() << endl;

	cout << a->Get(1) << endl;

}





 

你可能感兴趣的:(工厂方法)