使用shared_ptr引用 作为thread的种线程函数的参数报错。
//创建智能指针
std::shared_ptr<protocal> tmp(new protocal());
protocal_ptr = tmp;
//线程函数声明、定义
static void protocalthread_callback(std::shared_ptr<protocal> &arg);
void protocal::protocalthread_callback(std::shared_ptr<protocal>& arg)
{
arg->protocal_thread();
}
//执行线程
thread t2(protocal::protocalthread_callback,protocal_ptr);
t2.detach();
编译后出现错误
/opt/ext-toolchain/arm-linux-gnueabihf/include/c++/5.3.1/functional:1505:61: error: no type named 'type' in 'class std::result_of<void (*(std::shared_ptr<protocal>))(std::shared_ptr<protocal>&)>'
typedef typename result_of<_Callable(_Args...)>::type result_type;
^
/opt/ext-toolchain/arm-linux-gnueabihf/include/c++/5.3.1/functional:1526:9: error: no type named 'type' in 'class std::result_of<void (*(std::shared_ptr<protocal>))(std::shared_ptr<protocal>&)>'
_M_invoke(_Index_tuple<_Indices...>)
尝试不使用引用传递智能指针,而使用值传递的方式,编译通过。
求解为什么引用传递会报错呢?
诚心求解
试试改成下面两种形式:
// 形式1:
thread t2(protocal::protocalthread_callback, ref(protocal_ptr));
// 形式2
thread t2(std::bind(&protocal::protocalthread_callback, protocal_ptr));
多线程读写同一个内存对象需要加锁