Argument of type '(Foo::)(int,int)' does not match 'void (*)(int,int)'以及静态函数问题

      今天在封装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  ~~~

你可能感兴趣的:(String,table,database,delete,iterator,Go)