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

The Context Policy

Boost , ,

The Context Policy (depreciated interface)

Введение
Заголовок «wave/preprocessing_hooks.hpp»
Функции члена

Introduction

Обратите внимание, что следующее описание относится к амортизированному интерфейсу, поскольку он использовался по умолчанию до Boost V1.34.x. Для нового интерфейса, пожалуйста, обратитесь кПолитика контекста. Вы все еще можете использовать этот старый интерфейс, определивBOOST_WAVE_USE_DEPRECIATED_PREPROCESSING_HOOKSПостоянная предварительной обработки, как указано вКонфигурация времени. По умолчанию новый интерфейс используется при запуске Boost V1.35.0, в то время как более старый используется по умолчанию.

Политика контекста используется для обеспечения крючков обратного вызова, которые вызываются из библиотеки в пользовательский код, когда

  • признана директива препроцессора,
  • токен должен быть возвращен из препроцессора,
  • a макроустановка определена или не определена,
  • макрос был расширен или отсканирован;
  • включающий файл был открыт или оставлен,
  • оценивалось условное выражение,
  • токен должен быть пропущен, поскольку он содержится в неоцененном условном блоке;
  • a прагма формы'волновой вариант [(значение)]'была признана.

Этот тип политики используется в качестве шаблонного параметра для повышения::wave:::context<>объекта, где политика по умолчанию обеспечивает только функции пустых крючков.

Header wave/preprocessing_hooks.hpp synopsis

namespace boost {
namespace wave {
namespace context_policies {
 
    struct default_preprocessing_hooks {
        // general hook functions
        template <typename TokenT>
        void found_directive(TokenT const &directive);
// test, whether a given token may be skipped
template <typename ContextT> bool may_skip_whitespace (ContextT const& ctx, TokenT &token, bool &skipped_newline);
// Conditional compilation template <typename ContainerT>
bool evaluated_conditional_expression(ContainerT const& expression,
bool expression_value);
template <typename TokenT> void skipped_token(TokenT const& token);
// macro expansion tracing template <typename TokenT, typename ContainerT> void expanding_function_like_macro(TokenT const &macrodef, std::vector<TokenT> const &formal_args, ContainerT const &definition, TokenT const &macrocall, std::vector<ContainerT> const &arguments); template <typename TokenT, typename ContainerT> void expanding_object_like_macro(TokenT const &macro, ContainerT const &definition, TokenT const &macrocall); template <typename ContainerT> void expanded_macro(ContainerT const &result); template <typename ContainerT> void rescanned_macro(ContainerT const &result); // include file tracing functions void found_include_directive(std::string const &filename, bool include_next); void opened_include_file(std::string const &relname, std::string const& absname, std::size_t include_depth, bool is_system_include); void returning_from_include_file(); // interpretation of #pragma's of the form // 'wave option[(value)]' template <typename ContextT, typename ContainerT> bool interpret_pragma(ContextT const &ctx, ContainerT &pending, typename ContextT::token_type const &option, ContainerT const &values, typename ContextT::token_type const &pragma_token); // macro definition hooks template < typename TokenT, typename ParametersT, typename DefinitionT > void defined_macro(TokenT const &name, bool is_functionlike, ParametersT const &parameters, DefinitionT const &definition, bool is_predefined); template <typename TokenT> void undefined_macro(TokenTconst &name); }; }}} // namespace boost::wave::context_policies

Member functions

General hook functions

found_directive

    template <typename TokenT>
    void found_directive(TokenT const &directive);

Функцияfound_directiveназывается, когда препроцессор обнаруживает одну из директив предварительной обработки#define,#undef,#if,#idef,#ifndef,#elif,#endif,#error,#include,#pragmaили#warning.

Директиваотносится к токену, содержащему обнаруженную директиву предварительной обработки.

may_skipwhitespace

    template <typename ContextT, typename TokenT>
    bool may_skip_whitespace(ContextT const& ctx, TokenT &token, bool& skipped_newline);

Функцияmay_skipwhitespaceбудет вызываться библиотекой всякий раз, когда токен собирается быть возвращен в вызывающее приложение.

Параметрctxсодержит ссылку наcontext_type, используемый во время инстанцирования итераторов предварительной обработки пользователем. Обратите внимание, что этот параметр был добавлен для выпуска Wave V1.2.4.

Параметртокенасодержит ссылку на текущий токен. Политика может свободно изменять этот токен, если это необходимо.

Параметрskipped_newlineсодержит ссылку на булево значение, которое должно быть установлено в соответствии с функцией политики всякий раз, когда новая линия будет пропущена.

Если значение возвратаистинно, данный токен пропускается, и предварительная обработка продолжается до следующего токена. Если значение возвраталожное, то данный токен возвращается в вызывающее приложение. Следует быть осторожным, потому что, возвращаяистинное, функция политики может заставить пропустить даже значительные токены.

Conditional compilation hook functions

оценено_условное_выражение

    template <typename ContainerT>
void evaluated_conditional_expression( ContainerT const& expression, bool expression_value);

Функцияevaluated_conditional_expressionназывается, когда препроцессор сталкивался с директивой#if,#elif,#ifdefили#ifndef. Этот крючок проходит нерасширенное условное выражение (как оно было дано в анализируемом исходном файле) и результат оценки этого выражения в текущем контексте предварительной обработки.

Параметрвыражениясодержит нерасширенную последовательность токенов, содержащую оцениваемое выражение.

Параметрexpression_valueсодержит результат оценки выражения в текущем контексте предварительной обработки.

skipped_token

    template <typename TokenT>
    void skipped_token(TokenT const& token);

Функцияskipped_tokenназывается всякий раз, когда токен собирается быть пропущен из-за ложного предпроцессорного состояния (фрагменты кода должны быть пропущены внутри не оцененных условных#если/#else/#endifветвей).

Параметртокенотносится к токену, который должен быть пропущен.

Macro expansion tracking functions

expand_function_like_macro

    template <typename TokenT, typename ContainerT>
    void expanding_function_like_macro(TokenT const &macrodef, 
        std::vector<TokenT> const &formal_args, 
        ContainerT const &definition, TokenT const &macrocall, 
        std::vector<ContainerT> const &arguments);

Функцияexpand_function_like_macroназывается всякий раз, когда должно быть расширено функциональное макросо, то естьдофактического расширения.

Параметрмакроимяобозначает положение, в котором определяется макрос для расширения. Он содержит токен, который идентифицирует макро-имя, используемое внутри соответствующего макро-определения.

Параметрformal_argsсодержит формальные аргументы, используемые при определении макроса.

Параметрсодержит макроопределение для макроотслеживания. Это стандартный контейнер STL, который содержит последовательность токенов, идентифицированную во время макроопределения как список замены макросов.

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

Параметраргументовсодержит макроаргументы, используемые при вызове макроса. Это вектор стандартных STL-контейнеров, которые содержат последовательности токенов, идентифицированные в положении макровызова в качестве аргументов, которые будут использоваться во время макрорасширения.

расширение_object_like_macro

    template <typename TokenT, typename ContainerT>
    void expanding_object_like_macro(TokenT const &macro, 
        ContainerT const &definition, TokenT const &macrocall);

Функцияexpand_object_like_macroназывается всякий раз, когда объектоподобный макрос должен быть расширен, то естьдофактического расширения начинается.

Параметрмакроимяобозначает положение, в котором определяется макрос для расширения. Он содержит токен, который идентифицирует макро-имя, используемое внутри соответствующего макро-определения.

Параметрсодержит макроопределение для макроотслеживания. Это стандартный контейнер STL, который содержит последовательность токенов, идентифицированную во время макроопределения как список замены макросов.

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

расширен_макро

    template <typename ContainerT>
    void expanded_macro(ContainerT const &result);

Функцияexpand_macroназывается всякий раз, когда завершено расширение макроса, список замены полностью сканируется, и идентифицированные макросы в настоящем документе заменяются соответствующими результатами расширения, нодоначинается процесс сканирования.

Параметррезультатасодержит результат макрорасширения. Это стандартный контейнер STL, содержащий генерируемую последовательность токенов.

rescanned_macro

    template <typename ContainerT>
    void rescanned_macro(ContainerT const &result);

Функцияrescanned_macroназывается всякий раз, когда сканирование макроса завершено, т.е. макрорасширение завершено.

Параметррезультатасодержит результат всего макрорасширения. Это стандартный контейнер STL, содержащий генерируемую последовательность токенов.

Include file tracing functions

found_include_directive

    void found_include_directive(std::string const &filename,
        bool include_next);

Функцияfound_include_directiveназывается всякий раз, когда находится директива #include.

Параметримени файласодержит (расширенное) имя файла, найденное после директивы#include. Это формат,"file"илифайл. Форматыили"file"используются для директив#include, найденных в предварительно обработанном потоке токенов, форматфайлаиспользуется для файлов, указанных через аргумент командной строки --force_include.

Параметрinclude_nextявляется верным, если найденная директива была директивой#include_nextиBOOST_WAVE_SUPPORT_INCLUDE_NEXTПостоянная предварительной обработки была определена для чего-то! 0.

open_include_file

    void opened_include_file(std::string const &rel_filename, 
        std::string const &abs_filename, 
        std::size_t include_depth, bool is_system_include);

Функцияopen_include_fileназывается всякий раз, когда файл, упомянутый директивой#include, был успешно обнаружен и открыт.

Параметрrel_filenameсодержит (нормализованный) вероятно относительный путь файловой системы открытого файла. Конкретный формат этого имени файла зависит от формата включения пути поиска, данного библиотеке заранее.

Параметрabs_filenameсодержит (нормализованный) полный путь файловой системы открытого файла.

Параметрinclude_depthсодержит текущий параметр include file depth.

Параметрis_system_includeобозначает, если данный файл был найден в результате директивы#include <...>.

Return_from_include_file

    void returning_from_include_file();

Функцияreturn_from_include_fileвызывается всякий раз, когда включенный файл собирается закрыться после завершения его обработки.

Interpretation of #pragma's

интерпретировать_прагма

    template <typename ContextT, typename ContainerT>
    bool interpret_pragma(ContextT const &ctx, ContainerT &pending, 
        typename ContextT::token_type const &option, 
        ContainerT const &values, 
        typename ContextT::token_type const &pragma_token);

Функцияinterpret_pragmaназывается всякий раз, когда в входном потоке находится непризнанная#pragma wave ...или оператор_Pragma("wave ...").

Параметрctxсодержит ссылку наcontext_type, используемый во время инстанцирования итераторов предварительной обработки пользователем.

ожидающийпараметр может использоваться для выталкивания токенов обратно во входной поток, который должен использоваться в качестве заменяющего текста для всего#pragma wave()Директива. Если эта последовательность остается пустой, замена не происходит, т.е. интерпретируемая директива удаляется из генерируемого потока токенов.

Параметрсодержит название интерпретируемой прагмы.

Параметрсодержит значение параметра, предоставленного оператору прагмы.

Параметрpragma_tokenсодержит фактический токен #pragma, который может использоваться для извлечения информации о местоположении для некоторого вывода ошибки.

Если значение возврата является «ложным», вся директива #pragma интерпретируется как неизвестная и выдается соответствующее сообщение об ошибке. Обратное значение «истинного» означает успешную интерпретацию данной прагмы.

Macro definition

определен_макро

    template <
        typename TokenT, typename ParametersT, typename DefinitionT
    >
    void defined_macro(TokenT const &name, bool is_functionlike,
        ParametersT const &parameters, DefinitionT const &definition,
        bool is_predefined);

Функцияdefined_macroназывается всякий раз, когда макрос был успешно определен.

Имяявляется ссылкой на токен, содержащий имя макроса.

Параметрявляется_функциональнымустанавливается как истинный всякий раз, когда вновь определенный макрос определяется как функция, подобная макросу.

Параметрпараметровсодержит токены параметров для макроопределения. Если макрос не имеет параметров или является объектом, подобным макросу, то этот контейнер пуст.

Определение параметрасодержит последовательность токенов, заданную как замещающая последовательность (часть определения) вновь заданного макроса.

Параметрis_predefinedустановлен для всех макросов, предопределенных во время начальной фазы библиотеки.

undefined_macro

    template <typename TokenT>
    void undefined_macro(TokenTconst &name);

Функцияundefined_macroназывается всякий раз, когда макроопределение было успешно удалено.

Имясодержит знак макроса, определение которого было удалено.


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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 05:06:03/0.028223037719727/1