使用functor类型实例化模板以进行回调

时间:2015-03-18 08:29:56

标签: c++ templates callback cpp-netlib

我对cpp-netlib中用于实现HTTP服务器和处理程序请求的'技术'有疑问。

文档说明:

与HTTP客户端一样,cpp-netlib提供的HTTP服务器可通过标记机制进行扩展,并且是可嵌入的。 basic_server的模板类声明如下:

namespace boost { namespace network { namespace http {

    template <class Tag, class RequestHandler> basic_server;

}}}

第二个模板参数用于指定请求处理程序类型。请求处理程序类型是一种函子类型,它应该重载函数调用操作符(RequestHandler :: operator()应该重载),它接受两个参数:第一个是对const basic_request的引用,第二个是对basic_response的引用实例

因此,在我的代码中,我创建了一个处理程序(声明了所需的函数)并使用它来构造一个options对象:

boost::network::http::server<HttpRequestHandler>::options options(*handler);

然后使用options和handler标签创建服务器(我认为这是正确的术语):

boost::network::http::server<HttpRequestHandler> server(options);

根据需要,我的处理程序类提供函数调用操作符。一切正常 - 即收到消息时调用处理程序。

我的问题是:库如何访问我的处理程序的完整类型,以便它可以在未包含它时调用该函数?

1 个答案:

答案 0 :(得分:2)

我想这个库实例化了你的类的对象,它作为模板参数传递。然后它只使用函数调用操作符,您已根据库的请求重载。

在图书馆的内部发生了以下几点:

template <class Functor>
void doStuff() {
    auto callback = Functor();
    callback();
}

您的课程中不需要#include您的课程,因为您调用的函数是模板函数 - 您实际调用的函数的确切定义是在汇编

相关问题