<div dir="ltr">Hello Team,<div><br></div><div>I am trying to pass  a c++ class member function as a callback to protocols.</div><div><br></div><div>Here is the relevant piece of code.</div><div><br></div><div>This is how my callback function is declared.</div><div><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:"Droid Sans Mono",monospace,monospace,"Droid Sans Fallback";font-size:14px;line-height:19px;white-space:pre"><div><span style="color:rgb(86,156,214)">int</span> <span style="color:rgb(78,201,176)">ns</span>::<span style="color:rgb(78,201,176)">class_name</span>::<span style="color:rgb(220,220,170)">callback_ws</span>( <span style="color:rgb(86,156,214)">struct</span> <span style="color:rgb(78,201,176)">lws</span> <span style="color:rgb(86,156,214)">*</span><span style="color:rgb(156,220,254)">wsi</span>, <span style="color:rgb(86,156,214)">enum</span> <span style="color:rgb(78,201,176)">lws_callback_reasons</span> <span style="color:rgb(156,220,254)">reason</span>, </div><div><span style="color:rgb(86,156,214)"> void</span> <span style="color:rgb(86,156,214)">*</span><span style="color:rgb(156,220,254)">user</span>, <span style="color:rgb(86,156,214)">void</span> <span style="color:rgb(86,156,214)">*</span><span style="color:rgb(156,220,254)">in</span>, <span style="color:rgb(86,156,214)">size_t</span> <span style="color:rgb(156,220,254)">len</span>);</div><div><br></div></div></div><div><br></div><div>This is how I am using it to pass it to protocols:</div><div><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:"Droid Sans Mono",monospace,monospace,"Droid Sans Fallback";font-size:14px;line-height:19px;white-space:pre"><div>  <span style="color:rgb(78,201,176)">std</span>::function<<span style="color:rgb(86,156,214)">int</span>(struct lws *wsi, enum lws_callback_reasons reason, <span style="color:rgb(86,156,214)">void</span> *user, <span style="color:rgb(86,156,214)">void</span> *in, <span style="color:rgb(86,156,214)">size_t</span> len)> callback_func;</div><br><div>  callback_func = <span style="color:rgb(78,201,176)">std</span>::<span style="color:rgb(220,220,170)">bind</span>(&<span style="color:rgb(78,201,176)">ns</span>::<span style="color:rgb(78,201,176)">class_name</span>::callback_ws,<span style="color:rgb(86,156,214)">this</span>,</div><div>    <span style="color:rgb(78,201,176)">std</span>::<span style="color:rgb(78,201,176)">placeholders</span>::_1, <span style="color:rgb(78,201,176)">std</span>::<span style="color:rgb(78,201,176)">placeholders</span>::_2, </div><div>    <span style="color:rgb(78,201,176)">std</span>::<span style="color:rgb(78,201,176)">placeholders</span>::_3, <span style="color:rgb(78,201,176)">std</span>::<span style="color:rgb(78,201,176)">placeholders</span>::_4, </div><div>    <span style="color:rgb(78,201,176)">std</span>::<span style="color:rgb(78,201,176)">placeholders</span>::_5);</div><br><div>  <span style="color:rgb(156,220,254)">m_protocols</span>[<span style="color:rgb(181,206,168)">0</span>].<span style="color:rgb(156,220,254)">name</span> = <span style="color:rgb(206,145,120)">"named_protocol"</span>;</div><div>  <span style="color:rgb(156,220,254)">m_protocols</span>[<span style="color:rgb(181,206,168)">0</span>].<span style="color:rgb(156,220,254)">callback</span>  = callback_func;</div><div>  <span style="color:rgb(156,220,254)">m_protocols</span>[<span style="color:rgb(181,206,168)">0</span>].<span style="color:rgb(156,220,254)">per_session_data_size</span> = <span style="color:rgb(181,206,168)">0</span>;</div><div>  <span style="color:rgb(156,220,254)">m_protocols</span>[<span style="color:rgb(181,206,168)">0</span>].<span style="color:rgb(156,220,254)">rx_buffer_size</span> = m_max_data_size;</div><br><div><span style="color:rgb(106,153,85)">  // terminator - needed by libwebsocket</span></div><div>  <span style="color:rgb(156,220,254)">m_protocols</span>[<span style="color:rgb(181,206,168)">1</span>].<span style="color:rgb(156,220,254)">name</span> = <span style="color:rgb(86,156,214)">NULL</span>;</div><div>  <span style="color:rgb(156,220,254)">m_protocols</span>[<span style="color:rgb(181,206,168)">1</span>].<span style="color:rgb(156,220,254)">callback</span> = <span style="color:rgb(86,156,214)">NULL</span>;</div><div>  <span style="color:rgb(156,220,254)">m_protocols</span>[<span style="color:rgb(181,206,168)">1</span>].<span style="color:rgb(156,220,254)">per_session_data_size</span> = <span style="color:rgb(181,206,168)">0</span>;</div><div>  <span style="color:rgb(156,220,254)">m_protocols</span>[<span style="color:rgb(181,206,168)">1</span>].<span style="color:rgb(156,220,254)">rx_buffer_size</span> = <span style="color:rgb(181,206,168)">0</span>;</div></div></div><div><br></div><div>I am getting the following error:</div><div><br></div><div>error: cannot convert ‘std::function<int(lws*, lws_callback_reasons, void*, void*, long unsigned int)>’ to ‘int (*)(lws*, lws_callback_reasons, void*, void*, size_t) {aka int (*)(lws*, lws_callback_reasons, void*, void*, long unsigned int)}’ in assignment<br>   m_protocols[0].callback  = callback_func;<br>                              ^~~~~~~~~~~~~<br></div><div>I do not understand when the return data type of callback function is int, why is it throwing error looking for  int(*).</div><div><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Regards,<div>Pranjali</div></div></div></div></div></div>