现在的位置: 首页 > 综合 > 正文

C++ boost::bind 函数参数对数组、指针的支持不够好?欢迎指教

2013年05月21日 ⁄ 综合 ⁄ 共 1474字 ⁄ 字号 评论关闭

我们先看看下面一段代码:直接使用数组,即StreamConfigTable数组作为bind函数参数,PersistentStreamSettingsToDevice函数的第一个参数为数组形式StreamSetting_t StreamConfigTable[]。大家知道,数组名作为函数参数时候,实际退化为一个指针。

ReturnStatus CServiceEngine::SaveStreamConfigurations(StreamSetting_t StreamConfigTable[], int resourceStreamId , int VideoSourceIndex, PelcoStreamSetting_type_e SettingType)
{
	TRACE("%s, %d, Start a thread to save stream configurations:%d", __FUNCTION__, __LINE__,resourceStreamId);
	boost::thread boost_thread(  boost::bind(&CServiceEngine::PersistentStreamSettingsToDevice, this, StreamConfigTable, resourceStreamId ,VideoSourceIndex ) );
	boost_thread.detach();	 
	return SYS_OK;
}

测试结果,当在PersistentStreamSettingsToDevice函数中直接以StreamConfigtable[i],即数组下表引用时,编译可以通过,但运行时出现段错误。

于是猜测:boost::bind函数的参数对对象数组这种指针参数的支持不够好。

为了验证,将PersistentStreamSettingsToDevice函数的第一个参数又数组形式改为容器形式:vector<PelcoStreamSetting_t> StreamConfigTable。

同时上述代码调整为:

ReturnStatus CServiceEngine::SaveStreamConfigurations(StreamSetting_t StreamConfigTable[], int resourceStreamId , int VideoSourceIndex, PelcoStreamSetting_type_e SettingType)
{

	int i =0;
	vector<PelcoStreamSetting_t> ConfigTable;
	for ( i= SETTING_ENCODING; i<SETTING_END; i++ )		 	
	{	
		ConfigTable.push_back(StreamConfigTable[i]);
	}
	TRACE("%s, %d, Start a thread to save stream configurations:%d", __FUNCTION__, __LINE__,resourceStreamId);
	boost::thread boost_thread(  boost::bind(&CServiceEngine::PersistentStreamSettingsToDevice, this,ConfigTable, resourceStreamId ,VideoSourceIndex ) );
	boost_thread.detach();
	 
	return SYS_OK;
}

 

测试结果:程序编译通过,运行也正常。

难道boost::bind函数对数组的支持真的不够好?

欢迎知情者指教!

抱歉!评论已关闭.