我希望能够在使用 cpp-netlib 构建的服务器中获取包含 utf8 字符的 HTTP 请求标头值。我知道根据使用的字符串类型,请求和响应有两种包装类 -request_header_narrow
和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
用作默认字符串类型吗?