![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
The Input PolicyBoost , ,
IntroductionТип политики ввода может быть указан в качестве параметра шаблона для объекта wave::context и используется для настройки способа, как включенный файл должен быть представлен парой итераторов, указывающих на начало и конец полученной последовательности ввода. Если этот параметр шаблона не задан при моменте мгновенных данных контекстного объекта, он по умолчанию для типа iteration_context_policies::load_file_to_string. Header wave/iteration_context.hpp synopsisСледующий список кода не показывает требуемый интерфейс только, но по причинам краткости вся реализация политики ввода, которая загружает данный файл в строковую переменную и подвергает итераторов начала () и конца () этой строки в библиотеку Wave. namespace boost { namespace wave { namespace iteration_context_policies { struct load_file_to_string { template <typename IterContext> class inner { public: // expose the begin and end iterators for the // included file template <typename Position> static void init_iterators(IterContext&iter_ctx, Position const &act_pos) { typedef typename IterContext::iterator_type iterator_type; std::ifstream instream(iter_ctx.filename.c_str()); if (!instream.is_open()) { CPP_THROW(preprocess_exception, bad_include_file, iter_ctx.filename, act_pos); } iter_ctx.instring = std::string( std::istreambuf_iterator Как вы можете видеть, input_policy для wave::context объект должен выполнять только одну функцию, функцию init_iterators. Показанная политика реализуется с помощью встроенного класса, чтобы избежать необходимости шаблонных параметров, которые не реализуются всеми системами сегодня. Этот встроенный класс должен иметь имя inner. Template ParametersКласс inner мгновенный с одним параметром шаблона, типом контекста итерации, частью которого является политика. Тип итератора итератора_type, который используется для доступа к исходному потоку ввода, должен быть получен через тип-def, как показано. Пара инициализатора для инициализации (которая доступна как iter_ctx.first и iter_ctx.last) должна инициализироваться из типа итератора абритрары, представляющего фактический поток ввода. Member Functionstemplate <typename Position> static void init_iterators( IterContext iter_ctx, Position const &act_pos); директива была найдена в потоке токенов ввода. Основным обоснованием этой функции является инициализация пары итераторов iter_ctx.first и iter_ctx.last, которые должны быть использованы для доступа к потоку ввода, соответствующему входному файлу, который должен быть вставлен изнутри предпроцессорного двигателя.
Copyright © 2003-2011 Hartmut Kaiser Last updated: Sunday, October 12, 2008 20:14 Статья The Input Policy раздела может быть полезна для разработчиков на c++ и boost. Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: ::
|
|||||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |