Быстрое и простое решение
Сделайте HandleRequest
глобальной переменной, которая является указателем функции:
std::string (*HandleRequest)(Request);
Вы можете переместить функциональность старой функции HandleRequest
в нечто вроде DefaultHandleRequest
и вы даже можете инициализировать указатель на функцию, используя DefaultHandleRequest
:
std::string DefaultHandleRequest(Request request)
{
// stuff
}
std::string (*HandleRequest)(Request) = DefaultHandleRequest;
Если вы сделаете это, вам не нужно будет изменять любой другой код, но вы сможете обновить HandleRequest
когда угодно.
Более тщательное решение
Мы можем сделать это решение гораздо более общим, позволяя вам иметь несколько серверов, работающих в одной программе.
В порядкеДля этого создайте класс Server
, который будет выполнять роль сервера.Экземпляр этого класса будет действовать как ваш сервер.Пусть Server
хранит std::function<std::string(Request)>
, который обрабатывает входящие запросы.Вы можете назначить или обновить это в любое время, по мере необходимости.
Дизайн Server
, чтобы можно было создать несколько экземпляров одновременно, каждый из которых представляет отдельный сервер / службу со своей собственной функцией HandleRequest
.