Передача std :: function в качестве параметра шаблона другой функции не компилируется - PullRequest
0 голосов
/ 20 марта 2020

Я развиваю в C + 03, используя Boost. Я хотел бы связать член класса функции. Затем передайте это обертке generi c в качестве параметра шаблона и внутри обертки для вызова реальной функции. Но я не могу сделать это для компиляции.

Ниже приведен демонстрационный код

#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <functional>
#include <iostream>

class Request;
class Request2;
boost::function<int (const char *,const char *, Request     *request)> RequestFunc; 
boost::function<int (const char *,const char *, Request2 *request)>     RequestFunc2;
class Request
{

};
class Request2
{

};
class BindingProxy
{
    public:
    int  sendRequest(char *,char *, Request * request)
    {
        return 0;
    }
};
class BindingProxy2
{
    public:
    int  sendRequest(char *,char *, Request2 * request)
    {
        return 0;
    }
};
template <typename F>
void wrapperFunc(F func)
{
    Request request;
    func("","",request);
}
int main()
{
  BindingProxy proxy;  

  RequestFunc  = boost::bind(&BindingProxy::sendRequest, &proxy,_1,_2,_3 );

  wrapperFunc(RequestFunc);

  return 0;
}

1 Ответ

1 голос
/ 20 марта 2020

Во-первых, подпись sendRequest не соответствует подписи, переданной в boost:function, должна быть:

int  sendRequest(const char *,const char *, Request * request)

Во-вторых, оболочка получает указатель на запрос, поэтому получите его и передайте:

Request request;
func("","",&request);

Живая демоверсия

...