![]() |
![]() ![]() ![]() ![]() |
![]() |
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
bBТип 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 ::
реклама |