将 std::function 作为模板参数传递给另一个函数不编译
Pass a std::function as template parameter to another function does not compile
我使用 Boost 在 C+03 中开发。
我想绑定一个函数 class 成员。然后将其作为模板参数传递给通用包装器,并在包装器内部调用真正的函数。但是我不能让它编译。
下面是演示代码
#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;
}
首先,sendRequest
的签名与传递给 boost:function
的签名不匹配,应该是:
int sendRequest(const char *,const char *, Request * request)
其次,wrapper 获取指向请求的指针,因此获取并传递:
Request request;
func("","",&request);
我使用 Boost 在 C+03 中开发。 我想绑定一个函数 class 成员。然后将其作为模板参数传递给通用包装器,并在包装器内部调用真正的函数。但是我不能让它编译。
下面是演示代码
#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;
}
首先,sendRequest
的签名与传递给 boost:function
的签名不匹配,应该是:
int sendRequest(const char *,const char *, Request * request)
其次,wrapper 获取指向请求的指针,因此获取并传递:
Request request;
func("","",&request);