今天在封装DTL函数的时候,遇到了这个错误: error: argument of type ‘void (EH_Database::)(ParamObjExample&)’ does not match ‘void (*)()’ 也就是我的成员函数,与普通的调用函数指针不匹配。
封装一个delete函数,目的是提供字符串在数据库中查找删除。而字符串,需要用
SetParamsExample(ParamObjExample& params);函数对参数进行设置,并进行关联。
最初的解决方案为,将SetParamsExample()函数设置为全局函数,类中添加静态静态成员:
static string m_strDelete;并初始化为空字符串:
string EH_Database::m_strDelete="";设置参数过程改为如下:
void EH_Database::SetParamsExample(ParamObjExample& params) { // set parameter values params.lowIntValue = INT_MAX; params.highIntValue = INT_MAX; params.strValue = EH_Database::m_strDelete; }最初的考虑是,如果设置参数,不需要定义个类对象,于是用了static方法。成功实现参数传递
然后将函数SetPararamsExample封装到类中,并去掉静态成员,在构造函数中初始化m_strDelete为空,Set中语句为:
params.strValue = m_strDelete;得到错误如题,C++的普通函数指针没发直接调用类成员函数,怎搞? http://stackoverflow.com/questions/4017414/argument-of-type-fooint-int-does-not-match-void-int-int-in-main-cp 提到可以将函数设置为static,试之,成功。
成品如下:
类中:
public: static void SetParamsExample(ParamObjExample& params); static string m_strDelete;set函数中
void EH_Database::SetParamsExample(ParamObjExample& params) { params.lowIntValue = 2; params.highIntValue = INT_MAX; params.strValue = m_strDelete; }初始化成员:
string EH_Database::m_strDelete="";delete函数中:
void Delete(string toDelete, string table = "example"); //以上为.h声明,提供默认参数 void EH_Database::Delete(string toDelete, string table) { m_strDelete = toDelete; typedef DBView<Example, ParamObjExample> DBV; DBV view(table, BCAExample(), "WHERE INT_VALUE BETWEEN (?) AND (?) OR " "STRING_VALUE = (?) ORDER BY INT_VALUE", BPAExampleObj()); IndexedDBView<DBV> indexed_view( view, "UNIQUE PrimaryIndex; STRING_VALUE; " "AlternateIndex; INT_VALUE", BOUND, USE_ALL_FIELDS, cb_ptr_fun(SetParamsExample)); IndexedDBView<DBV>::iterator idxview_it = indexed_view.begin(); IndexedDBView<DBV>::iterator deleteMe = idxview_it; idxview_it++; indexed_view.erase(deleteMe); }感觉上,加上static后,用起来还是和全局函数类似,只是放到了类里面而已,而静态函数又只能掉静态成员,所以如同下面网址 http://bbs.chinaunix.net/thread-967788-1-1.html13楼的说法:静态函数一般也就是用在封装一些常用的、通用的、与类相关但又与实例无关的成员函数。 http://wenku.baidu.com/view/65f1b31e650e52ea551898b4.html这个总结也还不错,就是稍贵,看看也还行。
OK,写了个类,封装了插入删除,今天的成果,菜鸟go go go ~~~