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

Values

Boost , Chapter 1. Phoenix 3.2.0 , Starter Kit

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

Ценности – это функции! Примеры:

val(3)
val("Hello, World")

Первый оценивает нулевую функцию (функцию, не принимающую аргументов), которая возвращает int, 3. Второй оценивает до нулевой функции, которая возвращает char const(&)[13], "Hello, World".

Lazy Evaluation

Запутались? val является унарной функцией и val(3) вызывает его, говорите? Да. Однако внимательно прочитайте: "оценивает до нулевой функции". val(3) оценивает до (возвращает) нулевую функцию. Aha! val(3) возвращает функцию! Так, поскольку val(3) возвращает функцию, вы можете вызвать ее. Пример:

std::cout << val(3)() << std::endl;

(См. values.cpp)

Второй вызов функции (без аргументов) вызывает нулевую функцию, которая затем возвращает 3. Необходимость второго вызова функции является причиной, по которой функция называется Лациально оцененная. Первый звонок ничего не делает. Вам нужен второй звонок, чтобы наконец оценить ситуацию. Первый вызов лениво оценивает функцию, т.е. ничего не делает и откладывает оценку на потом.

Callbacks

Может быть не сразу видно, насколько ленивая оценка может быть полезна, просто взглянув на приведенный выше пример. Поместить первый и второй вызов функции в одну строку действительно не очень полезно. Однако, если рассматривать val(3) как функцию обратного вызова (и в большинстве случаев они фактически используются таким образом), это будет ясно. Пример:

template <typename F>
void print(F f)
{
    cout << f() << endl;
}
int
main()
{
    print(val(3));
    print(val("Hello World"));
    return 0;
}

(См. callback.cpp)


PrevUpHomeNext

Статья Values раздела Chapter 1. Phoenix 3.2.0 Starter Kit может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Starter Kit ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 21:11:49/0.0064079761505127/0