Обратите внимание, что следующее описание относится к амортизированному интерфейсу, поскольку он использовался по умолчанию до Boost V1.34.x. Для нового интерфейса, пожалуйста, обратитесь кПолитика контекста. Вы все еще можете использовать этот старый интерфейс, определивBOOST_WAVE_USE_DEPRECIATED_PREPROCESSING_HOOKSПостоянная предварительной обработки, как указано вКонфигурация времени. По умолчанию новый интерфейс используется при запуске Boost V1.35.0, в то время как более старый используется по умолчанию.
Политика контекста используется для обеспечения крючков обратного вызова, которые вызываются из библиотеки в пользовательский код, когда
признана директива препроцессора,
токен должен быть возвращен из препроцессора,
a макроустановка определена или не определена,
макрос был расширен или отсканирован;
включающий файл был открыт или оставлен,
оценивалось условное выражение,
токен должен быть пропущен, поскольку он содержится в неоцененном условном блоке;
a прагма формы'волновой вариант [(значение)]'была признана.
Этот тип политики используется в качестве шаблонного параметра для повышения::wave:::context<>объекта, где политика по умолчанию обеспечивает только функции пустых крючков.
Функцияfound_directiveназывается, когда препроцессор обнаруживает одну из директив предварительной обработки#define,#undef,#if,#idef,#ifndef,#elif,#endif,#error,#include,#pragmaили#warning.
Директиваотносится к токену, содержащему обнаруженную директиву предварительной обработки.
Функцияmay_skipwhitespaceбудет вызываться библиотекой всякий раз, когда токен собирается быть возвращен в вызывающее приложение.
Параметрctxсодержит ссылку наcontext_type, используемый во время инстанцирования итераторов предварительной обработки пользователем. Обратите внимание, что этот параметр был добавлен для выпуска Wave V1.2.4.
Параметртокенасодержит ссылку на текущий токен. Политика может свободно изменять этот токен, если это необходимо.
Параметрskipped_newlineсодержит ссылку на булево значение, которое должно быть установлено в соответствии с функцией политики всякий раз, когда новая линия будет пропущена.
Если значение возвратаистинно, данный токен пропускается, и предварительная обработка продолжается до следующего токена. Если значение возвраталожное, то данный токен возвращается в вызывающее приложение. Следует быть осторожным, потому что, возвращаяистинное, функция политики может заставить пропустить даже значительные токены.
Функцияevaluated_conditional_expressionназывается, когда препроцессор сталкивался с директивой#if,#elif,#ifdefили#ifndef. Этот крючок проходит нерасширенное условное выражение (как оно было дано в анализируемом исходном файле) и результат оценки этого выражения в текущем контексте предварительной обработки.
Функцияskipped_tokenназывается всякий раз, когда токен собирается быть пропущен из-за ложного предпроцессорного состояния (фрагменты кода должны быть пропущены внутри не оцененных условных#если/#else/#endifветвей).
Параметртокенотносится к токену, который должен быть пропущен.
Функцияexpand_function_like_macroназывается всякий раз, когда должно быть расширено функциональное макросо, то естьдофактического расширения.
Параметрмакроимяобозначает положение, в котором определяется макрос для расширения. Он содержит токен, который идентифицирует макро-имя, используемое внутри соответствующего макро-определения.
Параметрformal_argsсодержит формальные аргументы, используемые при определении макроса.
Параметрсодержит макроопределение для макроотслеживания. Это стандартный контейнер STL, который содержит последовательность токенов, идентифицированную во время макроопределения как список замены макросов.
Параметрмакроколлаобозначает положение, в котором этот макрос вызывается. Он содержит токен, который идентифицирует макровызов внутри предварительно обработанного входного потока.
Параметраргументовсодержит макроаргументы, используемые при вызове макроса. Это вектор стандартных STL-контейнеров, которые содержат последовательности токенов, идентифицированные в положении макровызова в качестве аргументов, которые будут использоваться во время макрорасширения.
Функцияexpand_object_like_macroназывается всякий раз, когда объектоподобный макрос должен быть расширен, то естьдофактического расширения начинается.
Параметрмакроимяобозначает положение, в котором определяется макрос для расширения. Он содержит токен, который идентифицирует макро-имя, используемое внутри соответствующего макро-определения.
Параметрсодержит макроопределение для макроотслеживания. Это стандартный контейнер STL, который содержит последовательность токенов, идентифицированную во время макроопределения как список замены макросов.
Параметрмакроколлаобозначает положение, в котором этот макрос вызывается. Он содержит токен, который идентифицирует макровызов внутри предварительно обработанного входного потока.
Функцияexpand_macroназывается всякий раз, когда завершено расширение макроса, список замены полностью сканируется, и идентифицированные макросы в настоящем документе заменяются соответствующими результатами расширения, нодоначинается процесс сканирования.
Параметррезультатасодержит результат макрорасширения. Это стандартный контейнер STL, содержащий генерируемую последовательность токенов.
Функцияfound_include_directiveназывается всякий раз, когда находится директива #include.
Параметримени файласодержит (расширенное) имя файла, найденное после директивы#include. Это формат,"file"илифайл. Форматыили"file"используются для директив#include, найденных в предварительно обработанном потоке токенов, форматфайлаиспользуется для файлов, указанных через аргумент командной строки --force_include.
Параметрinclude_nextявляется верным, если найденная директива была директивой#include_nextиBOOST_WAVE_SUPPORT_INCLUDE_NEXTПостоянная предварительной обработки была определена для чего-то! 0.
Функция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вызывается всякий раз, когда включенный файл собирается закрыться после завершения его обработки.
Функцияinterpret_pragmaназывается всякий раз, когда в входном потоке находится непризнанная#pragma wave ...или оператор_Pragma("wave ...").
Параметрctxсодержит ссылку наcontext_type, используемый во время инстанцирования итераторов предварительной обработки пользователем.
ожидающийпараметр может использоваться для выталкивания токенов обратно во входной поток, который должен использоваться в качестве заменяющего текста для всего#pragma wave()Директива. Если эта последовательность остается пустой, замена не происходит, т.е. интерпретируемая директива удаляется из генерируемого потока токенов.
Параметрсодержит название интерпретируемой прагмы.
Параметрсодержит значение параметра, предоставленного оператору прагмы.
Параметрpragma_tokenсодержит фактический токен #pragma, который может использоваться для извлечения информации о местоположении для некоторого вывода ошибки.
Если значение возврата является «ложным», вся директива #pragma интерпретируется как неизвестная и выдается соответствующее сообщение об ошибке. Обратное значение «истинного» означает успешную интерпретацию данной прагмы.
Функцияdefined_macroназывается всякий раз, когда макрос был успешно определен.
Имяявляется ссылкой на токен, содержащий имя макроса.
Параметрявляется_функциональнымустанавливается как истинный всякий раз, когда вновь определенный макрос определяется как функция, подобная макросу.
Параметрпараметровсодержит токены параметров для макроопределения. Если макрос не имеет параметров или является объектом, подобным макросу, то этот контейнер пуст.
Определение параметрасодержит последовательность токенов, заданную как замещающая последовательность (часть определения) вновь заданного макроса.
Параметрis_predefinedустановлен для всех макросов, предопределенных во время начальной фазы библиотеки.
Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Last updated:
Tuesday, May 23, 2006 12:52
Статья The Context Policy раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.