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

Signed Integer Number Generators (int_, etc.)

Boost , Spirit 2.5.2 , Numeric Generators

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext
Description

int_generator может генерировать подписанные целые числа произвольной длины и размера. Это почти то же самое, что и uint_generator. Единственным отличием является дополнительная задача генерации знака '+' или '-', предшествующего номеру. Интерфейс класса такой же, как у uint_generator.

Генератор int_generator может использоваться для испускания обычных примитивных целых чисел C/C++ или даже определяемых пользователем скаляров, таких как бигинты (неограниченные точные целые числа), если тип следует определенным требованиям к выражению (для получения дополнительной информации о требованиях см. ниже ).

Header
// forwards to <boost/spirit/home/karma/numeric/int.hpp>
#include <boost/spirit/include/karma_int.hpp>

Кроме того, см. Включить структуру .

Namespace

Имя

boost::::lit : boost::spirit::karma::lit

boost::spirit::short_ // alias: boost::spirit::karma::short_

boost::::int_ //lias: boost::spirit::karma::int_

boost::::long_ //lias: boost::spirit::karma::long_

boost::::long_long : boost::spirit::karma::long_long

[Note]Note

Генераторы long_long и long_long(num) доступны только на платформах, где константа препроцессора BOOST_HAS_LONG_LONG определяется (т.е. на платформах, имеющих встроенную поддержку long long (64 бит) целых типов).

[Note]Note

lit повторно используется генераторами String, генераторами Character и численными генераторами. В общем, генератор char создается, когда вы проходите в символе, генератор струн создается, когда вы проходите в строке, а генератор цифр создается, когда вы используете буквальный номер.

Synopsis
template <
    typename T
  , unsigned Radix
  , bool force_sign>
struct int_generator;
Template parameters

Параметр

Описание

По умолчанию

T

Числовой базовый тип числового парсера.

int

Radix

База радикса. Это может быть либо 2: двоичный, 8: восьмичный, 10: десятичный и 16: шестидесятичный.

10

force_sign

Если true, все числа будут иметь знак (пространство для нуля)

ложный

Model of

Notation

num

Буквальное число, любое подписанное целое число, или Ленивый аргумент который оценивает значение типа Num

Num

Тип num: любой подписанный целочисленный тип

Radix

Постоянное целое число, обозначающее требуемый радикс для преобразования вывода. Действительные значения 2, 8, 10 и 16.

force_sign

Постоянная булевая буква, определяющая, всегда ли генерируемое число должно иметь знак ('+' для положительных чисел, для отрицательных чисел и для нуля.

Expression Semantics

Семантика выражения определяется только там, где она отличается от или не определена в PrimitiveGenerator.

Выражение

Семантика

lit (num)

Создайте целое число буквальных num с использованием форматирования по умолчанию (радикс 10, знак печатается только для отрицательных букв). Этот генератор никогда не выходит из строя (если основной выходной поток не сообщает об ошибке).

short_
int_
long_
long_long

Создайте целое число, предоставленное обязательным атрибутом, используя форматирование по умолчанию (радикс 10, знак печатается только для отрицательных букв). Этот генератор никогда не выходит из строя (если основной выходной поток не сообщает об ошибке).

short_(num)
int_(num)
long_(num)
long_long(num)

Все генераторы, перечисленные в таблице выше (кроме lit(num)), представляют собой предварительно определенные специализации int_generator<Num, Radix, force_sign> основного типа генератора целых чисел, описанного ниже. Можно напрямую использовать этот тип для создания целых генераторов с использованием широкого спектра вариантов форматирования.

Выражение

Семантика

int_generator<
    Num, Radix, force_sign
>()

Создайте целое число типа Num, предоставленное обязательным атрибутом с использованием указанного Radix (возможные значения 2, 8, 10, значение по умолчанию 10, значение по умолчанию 10). Если force_sign является ложным (по умолчанию), знак печатается только для отрицательных букв. Если force_sign true, все числа будут напечатаны с использованием знака, т.е. '-' для отрицательных чисел, '+' для положительных чисел и ' для нулей. Этот генератор никогда не выходит из строя (если основной выходной поток не сообщает об ошибке).

int_generator<
    Num, Radix, force_sign
>()(num)

Генерировать целое число типа Num, обеспечиваемое непосредственным буквальным значением, из которого инициализируется генератор, с использованием указанного Radix (возможные значения 2, 8, 10, значение по умолчанию 10, значение по умолчанию 10). Если force_sign является ложным (по умолчанию), знак печатается только для отрицательных букв. Если force_sign true, все числа будут напечатаны с использованием знака, т.е. '-' для отрицательных чисел, '+' для положительных чисел и ' для нулей. Если этот генератор имеет ассоциированный атрибут, он преуспевает только в том случае, если атрибут равен непосредственному буквальному (если основной выходной поток не сообщает об ошибке). В противном случае этот генератор выходит из строя и не генерирует никакого вывода.

Additional Requirements

int_generator<Num, Radix, force_sign>. .

Если boost::is_integral<Num>::value является rue Тип Num должен определять:

  • операторы сравнения для: <, , ==, , > и >=
  • числовые операторы для: +, -, /, , % и unary -

Если boost::is_integral<Num>::значение является фальсифицированным, тип Num должен быть определен:

  • операторы сравнения для: <, , ==, , > и >=
  • числовые операторы для: +, -, /, , % и unary -
  • функции помощника, реализующие интерфейс и семантику: std, std::std::pow, std::std, ltrunc, std::std::ceil. Они должны быть определены таким образом, чтобы их можно было найти с помощью поиска, зависящего от аргументов (ADL).
Attributes

Выражение

Атрибут

lit (num)

неиспользованный

short_

short, атрибут является обязательным (иначе компиляция выйдет из строя)

short_(num)

short, если атрибут является необязательным, генератор сравнивает атрибут с num и добивается успеха только в том случае, если оба равны, в противном случае.

int_

int, атрибут является обязательным (иначе компиляция выйдет из строя)

int_(num)

int, если атрибут является необязательным, генератор сравнивает атрибут с num и добивается успеха только в том случае, если оба равны, в противном случае.

long_

long, атрибут является обязательным (иначе компиляция выйдет из строя)

long_(num)

long, если атрибут поставляется, генератор сравнивает атрибут с num и добивается успеха только в том случае, если оба они равны, в противном случае.

long_long

long long, атрибут является обязательным (иначе компиляция выйдет из строя)

long_long (num)

long long, если атрибут поставляется, генератор сравнивает атрибут с num и добивается успеха только в том случае, если оба они равны, в противном случае.

int_generator<
    Num, Radix, force_sign
>()

Num, атрибут является обязательным (иначе компиляция выйдет из строя)

int_generator<
    Num, Radix, force_sign
>()(num)

Num, если атрибут поставляется, генератор сравнивает атрибут с num и добивается успеха только в том случае, если оба равны, в противном случае не получается.

[Note]Note

В дополнение к их обычному атрибуту типа Num все перечисленные генераторы принимают экземпляр boost::optional<Num>. Если инициализируется boost::optional<> (имеет значение), генераторы ведут себя так, как если бы их атрибутом был экземпляр Num и испускают значение, сохраненное в boost::optional<>. В противном случае генераторы не сработают.

Complexity

O(N), где N - число цифр, необходимых для представления генерируемого целого числа

Example
[Note]Note

Испытательный ремень для примера (примеров) ниже представлен в разделе Основные примеры.

Некоторые включают:

#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::int_;
using boost::spirit::karma::lit;

Базовое использование генератора int_:

test_generator("-2", lit(-2));
test_generator("-2", int_(-2));
test_generator_attr("-2", int_(-2), -2);
test_generator_attr("", int_(-2), 3);    // fails (as -2 != 3)!
test_generator_attr("-2", int_, -2);


PrevUpHomeNext

Статья Signed Integer Number Generators (int_, etc.) раздела Spirit 2.5.2 Numeric Generators может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Numeric Generators ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 04:25:11/0.0069270133972168/0