Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

The Input Policy

Boost , ,

The Input Policy

Введение
Ведущий 'wave/cpp_iteration_context.hpp' синопсис
Параметры шаблона
Метронные функции

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<char>(instream.rdbuf()),
                    std::istreambuf_iterator<char>());
                iter_ctx.first = iterator_type(iter_ctx.instring.begin(), 
                    iter_ctx.instring.end(), 
                    PositionT(iter_ctx.filename));
                iter_ctx.last = iterator_type();
            }
        private:
            std::string instring;
        };
    };
}   // namespace iteration_context_policies
}   // namespace wave 
}   // namespace boost   

Как вы можете видеть, input_policy для wave::context объект должен выполнять только одну функцию, функцию init_iterators. Показанная политика реализуется с помощью встроенного класса, чтобы избежать необходимости шаблонных параметров, которые не реализуются всеми системами сегодня. Этот встроенный класс должен иметь имя inner.

Template Parameters

Класс inner мгновенный с одним параметром шаблона, типом контекста итерации, частью которого является политика. Тип итератора итератора_type, который используется для доступа к исходному потоку ввода, должен быть получен через тип-def, как показано. Пара инициализатора для инициализации (которая доступна как iter_ctx.first и iter_ctx.last) должна инициализироваться из типа итератора абритрары, представляющего фактический поток ввода.

Member Functions

init_iterators

    template <typename Position>
    static void init_iterators(
        IterContext iter_ctx, 
        Position const &act_pos);

директива была найдена в потоке токенов ввода. Основным обоснованием этой функции является инициализация пары итераторов iter_ctx.first и iter_ctx.last, которые должны быть использованы для доступа к потоку ввода, соответствующему входному файлу, который должен быть вставлен изнутри предпроцессорного двигателя.


Статья The Input Policy раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 02:26:46/0.005418062210083/1