cpp-netlib で構築されたサーバーで、utf8 文字を含む HTTP 要求ヘッダー値を取得できるようにしたいと考えています。request_header_narrow
使用される文字列タイプに応じて、リクエストとレスポンスの 2 種類のラッパー クラスがあることを理解していますrequest_header_wide
。
template <class Tag>
struct request_header
: mpl::if_<
is_default_string<Tag>,
request_header_narrow,
typename mpl::if_<
is_default_wstring<Tag>,
request_header_wide,
unsupported_tag<Tag>
>::type
>
{};
と
namespace boost { namespace network {
template <class Tag, class Enable = void>
struct is_default_string : mpl::false_ {};
template <class Tag>
struct is_default_string<Tag, typename enable_if<typename Tag::is_default_string>::type> : mpl::true_ {};
} // namespace network
} // namespace boost
と
namespace boost { namespace network {
template <class Tag, class Enable = void>
struct is_default_wstring : mpl::false_ {};
template <class Tag>
struct is_default_wstring<Tag, typename enable_if<typename Tag::is_default_wstring>::type> : mpl::true_ {};
} // namespace network
} // namespace boost
私はテンプレート メタ プログラミングの経験があまりないので、Boostsmpl::if_
ロジックをよく理解していませんでした。また、両方がデフォルト値である場合、デフォルトの文字列型は実際にどのように決定さmpl::false_
れますか? 誰かがこれをクリアするか、cpp-netlibstd::wstring
をデフォルトの文字列型として使用する方法を説明できますか?