Skip to content

Instantly share code, notes, and snippets.

@glynos
Created January 25, 2010 19:27
Show Gist options
  • Save glynos/286142 to your computer and use it in GitHub Desktop.
Save glynos/286142 to your computer and use it in GitHub Desktop.
template <
class Tag
>
struct basic_request_handler_interface {
typedef basic_request<Tag> request_type;
typedef basic_response<Tag> response_type;
virtual void operator () (const request_type &request,
response_type &response) = 0;
};
template <
class Handler,
class Tag
>
struct basic_request_handler_impl : basic_request_handler_interface<Tag> {
Handler handler;
basic_request_handler_impl(Handler handler)
: handler(handler) {
}
virtual void operator () (const request_type &request,
response_type &response) {
handler(request, response);
}
};
template <
class Tag
>
struct basic_request_handler {
typedef basic_request<Tag> request_type;
typedef basic_response<Tag> response_type;
boost::shared_ptr<basic_request_handler_interface<Tag> > handler;
template <
class Handler
>
basic_request_handler(Handler handler)
: handler(new basic_request_handler_impl(handler)) {
}
virtual void operator () (const request_type &request,
response_type &response) {
(*handler)(request, response);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment