![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Boolean Generators (bool_)Boost , Spirit 2.5.2 , Numeric Generators
|
Имя |
---|
boost::spirit::lit // alias:
boost::spirit::karma::lit |
|
boost::spirit::true_ //
alias: boost::spirit::karma::true_ |
boost::spirit::false_ //
alias: boost::spirit::karma::false_ |
![]() | Note |
---|---|
|
template < typename B , unsigned Policies> struct bool_generator;
Параметр |
Описание |
По умолчанию |
---|---|---|
| bool | |
Policies | bool_policies<B> |
Notation
b
B
Тип b
: любой тип, пригодный для использования в качестве бульона, или в случае Задний Аргумент, его значение возврата
Семантика выражения определяется только там, где она отличается от или не определяется в PrimitiveGenerator
.
Выражение |
Семантика |
---|---|
| Создание булевых буквальных |
| Создание боолеинового значения, обеспечиваемого обязательным атрибутом с использованием форматирования по умолчанию ( |
bool_(b) | Создание боолеинового значения, обеспечиваемого непосредственным буквальным значением, генератор инициализируется с использованием форматирования по умолчанию ( |
| "true" .
Если этот генератор имеет ассоциированный атрибут, он преуспевает только
если атрибут true
также (если только основной поток вывода не сообщает об ошибке).
|
false_ | "false" .
Если этот генератор имеет ассоциированный атрибут, он преуспевает только
если атрибут false
также (если только основной поток вывода не сообщает об ошибке).
|
Все генераторы, перечисленные в таблице выше (за исключением lit(num)
) являются предопределенными специализациями bool_generator<B, Policies>
основной тип боролеанователя описан ниже. Можно напрямую использовать этот тип для создания булевых генераторов с использованием широкого спектра вариантов форматирования.
Выражение |
Семантика |
---|---|
bool_generator< B, Policies >() bool_generator< B, Policies >() [ORIG_END] --> | Policies Этот генератор никогда
(если только основной поток вывода не сообщает об ошибке).
|
bool_generator< B, Policies >()(b)
| Создайте боолеан типа |
В следующих списках перечислены требования, которые должны быть выполнены для использования определенного типа B
для обработки и использования bool_generator<B, Policies>
.
Тип B
:
Выражение |
Attribute |
---|---|
bool_(b) | unused |
| bool , атрибут
является обязательным (в противном случае компиляция потерпит неудачу)
|
bool_(b) | |
bool_generator< B, Policies >() bool_generator< B, Policies >() [ORIG_END] --> | |
bool_generator< B, Policies >()(b)
| |
![]() | Note |
---|---|
В дополнение к их обычному атрибуту типа |
Если требуется специальное форматирование боролаана, перегрузите класс политики bool_policies<B>
и используйте его в качестве параметра шаблона для bool_generator<
boolean-генератора. Например:
struct special_bool_policy : karma::bool_policies<> { template <typename CharEncoding, typename Tag , typename OutputIterator> static bool generate_false(OutputIterator& sink, bool b) { // we want to spell the names of false as eurt (true backwards) return string_inserter<CharEncoding, Tag>::call(sink, "eurt"); } }; typedef karma::bool_generator<special_bool_policy> backwards_bool_type; backwards_bool_type const backwards_bool; karma::generate(sink, backwards_bool, true); // will output: true karma::generate(sink, backwards_bool(false)); // will output: uert
Параметр шаблона B
должен быть типом, который должен быть отформатирован с использованием перегруженного типа политики. В то же время B
будет использоваться как тип атрибута создаваемого генератора реального числа. По умолчанию для B
является bool
.
Политика буллингового форматирования должна выявить следующее:
Выражение |
Описание |
---|---|
template <typename Inserter , typename OutputIterator , typename Policies> bool call (OutputIterator& sink, Num n , Policies const& p); template <typename Inserter , typename OutputIterator , typename Policies> bool call (OutputIterator& sink, Num n , Policies const& p); [ORIG_END] --> | template <typename Inserter, typename OutputIterator , typename Policies> static bool call (OutputIterator& sink, B b, Policies const& p) { return Inserter::call_n(sink, b, p); }
template <typename Inserter, typename OutputIterator , typename Policies> static bool call (OutputIterator& sink, B b, Policies const& p) { return Inserter::call_n(sink, b, p); }
|
template <typename CharEncoding, typename Tag, typename OutputIterator> bool generate_false( OutputIterator& sink, B b);
| Эта функция называется для создания булеана, если это Параметры шаблона Значение возврата определяет исход всего генератора. |
template <typename CharEncoding, typename Tag, typename OutputIterator> bool generate_true( OutputIterator& sink, B b);
|
Параметры шаблона Значение возврата определяет исход всего генератора. |
O(N), где
N
- это количество символов, необходимых для представления сгенерированного булеана.
![]() | Note |
---|---|
Испытательный узел для примера (примеров) ниже представлен в разделе Basics examples. |
Некоторые из них включают:
#include <boost/spirit/include/karma.hpp> #include <boost/spirit/include/support_utree.hpp> #include <boost/spirit/include/phoenix_core.hpp> #include <boost/spirit/include/phoenix_operator.hpp> #include <boost/fusion/include/std_pair.hpp> #include <iostream> #include <string>
Некоторые используют заявления:
using boost::spirit::karma::bool_; using boost::spirit::karma::lit;
Основное использование генератора bool_
:
test_generator("true", lit(true)); test_generator("false", bool_(false)); test_generator_attr("true", bool_(true), true); test_generator_attr("", bool_(true), false); // fails (as true != false)! test_generator_attr("false", bool_, false);
Статья Boolean Generators (bool_) раздела Spirit 2.5.2 Numeric Generators может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Numeric Generators ::
реклама |