cpp-neltib (и Boost) тип строки по умолчанию в Windows

Я хочу иметь возможность получить значения заголовка HTTP-запроса, которые содержат символы utf8 на сервере, созданном с помощью cpp-netlib. Я понимаю, что существует два вида классов-оболочек для запросов и ответов в зависимости от используемого типа строки — 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

Так как я не слишком разбираюсь в шаблонах метапрограммирования, я не совсем понял Усиления mpl::if_ логика и как на самом деле определяется тип строки по умолчанию, если оба имеют mpl::false_ в качестве значения по умолчанию? Может кто-нибудь или очистить это или объяснить, как использовать cpp-netlib std::wstring как тип строки по умолчанию?

1

Решение

Кажется, я нашел по крайней мере одно решение, но не уверен, что оно лучшее, поэтому комментарии приветствуются, но кажется, что по крайней мере один из способов сделать это — определить новый набор тегов сервера и затем передать эти теги базовому классу сервера:

namespace boost { namespace network { namespace http { namespace tags {

typedef mpl::vector<http, simple, async, pod, default_wstring, server> http_async_wstring_server_tags;

BOOST_NETWORK_DEFINE_TAG(http_async_wstring_server);

} /* tags */

} /* http */

} /* network */

} /* boost */

namespace http = boost::network::http;
...
typedef http::server_base<http::tags::http_async_wstring_server, CHTTPRequestHandler>::type async_server;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]