HTTP サーバーとハンドラー要求を実装するために cpp-netlib で使用される「手法」について質問があります。
ドキュメントには次のように記載されています。
HTTP クライアントと同様に、cpp-netlib で提供される HTTP サーバーは、タグ メカニズムによって拡張可能であり、組み込み可能です。basic_server のテンプレート クラス宣言は次のとおりです。
namespace boost { namespace network { namespace http {
template <class Tag, class RequestHandler> basic_server;
}}}
2 番目のテンプレート引数は、リクエスト ハンドラのタイプを指定するために使用されます。リクエスト ハンドラーの型は、関数呼び出し演算子 (RequestHandler::operator() をオーバーロードする必要があります) をオーバーロードする必要があるファンクター型であり、2 つのパラメーターを受け取ります。実例。
したがって、私のコードでは、(必要な関数を宣言する) ハンドラーを作成し、それを使用してオプション オブジェクトを構築します。
boost::network::http::server<HttpRequestHandler>::options options(*handler);
次に、オプションとハンドラー タグを使用してサーバーを作成します (これが正しい用語だと思います)。
boost::network::http::server<HttpRequestHandler> server(options);
必要に応じて、ハンドラー クラスは関数呼び出し演算子を提供します。すべて正常に動作します。つまり、メッセージを受信するとハンドラーが呼び出されます。
私の質問は次のとおりです。ライブラリがハンドラーの完全な型にアクセスして、関数が含まれていないときに関数を呼び出すことができるのはどうしてですか?