在数据库的开发中,
做c++开发的人,可能习惯这样做,写一个类,里面封装了所有需要的数据库操作函数。在以后要用的地方,声明一个对象,直接调用其中的成员函数。
但有一个问题是,我们经常需要把我们从数据库里面查询到的东西显示在我们的主窗口的界面上。这时,就是两个类之间的数据交换的问题了。
关于这个问题。我总结一下,有三种,当然,可能还有更多。
1.一切如常,只是声明的类成员函数前,要加关键字static,//涉及的一些知识,__thiscall __cdecl等,略过。
一个小例子:
class CADO
{
public:
bool RExecute(const _variant_t Source,void (*pfun)(_RecordsetPtr pRecord,DWORD lparam),DWORD lparam);
...
};
class CadoTextDlg : public CDialogEx
{
public:
CADO m_ado;
static void show(_RecordsetPtr pRecord,DWORD lparam);
};
void CadoTextDlg::show(_RecordsetPtr pRecord,DWORD lparam)
{
CadoTextDlg * pdlg=(CadoTextDlg*)lparam;
...
};
在CadoTextDlg中调用时用m_ado.xxx("SELECT *FROM xxx",&CadoTextDlg::show,(DWORD)this);
2.使用的是c++中的类的多态。
class CADO
{
public:
bool RExecute(const _variant_t Source,void (*pfun)(_RecordsetPtr pRecord,DWORD lparam),DWORD lparam);
virtual void show(_RecordsetPtr pRecord,DWORD lparam)=0;
...
};
class CadoTextDlg : public CDialogEx,public CADO
{
public:
//CADO m_ado;这里也不需要实例化对象了,使用时,直接调用即可。
void show(_RecordsetPtr pRecord,DWORD lparam);//重写此函数的功能就行
};
3.第三种方法,来硬的,就是第一种方法中,不加关键字static。
这种方法比较复杂一些,参考于Boost的泛型。正在研究,来日补上。
有错误的地方,请读者指正。谢谢!