C++工場方法と反射の簡単な実現

1395 ワード

最近仕事が終わった後、暇で退屈で、Oracleのocciベースの上にアクセス層をカプセル化して、Oracleの読み書き操作を処理しやすいようにしようとしています.
主にPocoライブラリとOTLおよびDTLを参照し、テンプレートとSTL、tr 1とlog 4 cplusなどのライブラリを利用して、プラットフォーム間での要求を実現する予定である.
その後、その上で、JavaのHibernateやibatisなどの技術に参加し、簡単なオブジェクト持続化層を実現する.
 
最近は技術的なテストと設計をしておきましょう.
 
先に1段の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;

}