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

来源:互联网 发布:部落冲突气球升级数据 编辑:程序博客网 时间:2024/05/10 07:22

我们先看看下面一段代码:直接使用数组,即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函数对数组的支持真的不够好?

欢迎知情者指教!