Увидел здесь: Lightweight HTTP Server in less than 40 Lines on libevent and C++11 . Признаюсь, раньше я не сталкивался с идеей использовать шаблонную структуру и ее специализацию для типа void. Сокращенный автономный пример, демонстрирующий и сам макрос, и результаты его применения:
#include <iostream> #define DECLARE_STRING_CONSTANT(name_, value_) \ namespace Private \ { \ template <typename T> \ struct name_ \ { \ static char const Name[]; \ static char const Value[]; \ }; \ template <typename T> \ char const name_ <T>::Name[] = #name_; \ template <typename T> \ char const name_ <T>::Value[] = #value_; \ } \ typedef Private:: name_ <void> name_; namespace Http { namespace Request { namespace Header { DECLARE_STRING_CONSTANT(Accept, Accept) DECLARE_STRING_CONSTANT(AcceptCharset, Accept-Charset) } } } int main() { std::cout << Http::Request::Header::Accept::Name << " -> " << Http::Request::Header::Accept::Value << std::endl; std::cout << Http::Request::Header::AcceptCharset::Name << " -> " << Http::Request::Header::AcceptCharset::Value << std::endl; } |
PS. Насколько я помню, в библиотеке POCO так же есть HTTP-сервер. Так что на POCO простейший HTTP-сервер, возможно, был бы еще короче :)
Комментариев нет:
Отправить комментарий