C++ boost::bind 函数参数对数组、指针的支持不够好?欢迎指教
2013-09-23 20:35
816 查看
我们先看看下面一段代码:直接使用数组,即StreamConfigTable数组作为bind函数参数,PersistentStreamSettingsToDevice函数的第一个参数为数组形式StreamSetting_t StreamConfigTable[]。大家知道,数组名作为函数参数时候,实际退化为一个指针。
测试结果,当在PersistentStreamSettingsToDevice函数中直接以StreamConfigtable[i],即数组下表引用时,编译可以通过,但运行时出现段错误。
于是猜测:boost::bind函数的参数对对象数组这种指针参数的支持不够好。
为了验证,将PersistentStreamSettingsToDevice函数的第一个参数又数组形式改为容器形式:vector<PelcoStreamSetting_t> StreamConfigTable。
同时上述代码调整为:
测试结果:程序编译通过,运行也正常。
难道boost::bind函数对数组的支持真的不够好?
欢迎知情者指教!
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函数对数组的支持真的不够好?
欢迎知情者指教!
相关文章推荐
- C++指针、数组、引用、变量作函数参数
- C/C++ 不带参数的回调函数 与 带参数的回调函数 函数指针数组 例子
- C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态
- Boost.Bind用法详解(一) 2008-05-09 15:50:50| 分类: C++ |字号 订阅 Boost.Bind 为函数和函数对象提供了一致的语法,对于值语义和指针语义也一样。
- C++中用指向数组的指针作函数参数
- C/C++ 不带参数的回调函数 与 带参数的回调函数 函数指针数组 例子
- C++指针【数组、字符串作为函数的参数】
- C++学习笔记(三)--函数参数,数组函数,指针和const,二维数组函数,递归,函数指针
- [C++程序设计]用指向数组的指针作函数参数
- C++中将数组的指针作为函数参数
- 二维数组做函数参数,如何将三维数组降为二维数组,指向数组的指针的使用
- c++函数中的 指针参数跟地址参数区别
- c/c++ 函数、常量、指针和数组的关系梳理
- C++ 常量指针或者常量引用作为函数参数传递的原因
- c++中函数参数传递(值传递、指针传递,引用传递)进一步认识
- C++多维数组:存储方式、访问方式和作为函数参数
- C++中数组作函数参数的问题
- [C++程序设计]用指针变量作函数参数接收数组地址
- 指针作为函数参数在C/C++中调试和探讨
- 数组名与函数指针(C++)