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