![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Place holdersBoost , ,
До сих пор, помимо закуски быстрого старта, мы представили несколько примеров ленивых функций с использованием закуски. символ, чтобы действовать в качестве заполнителя для еще не предоставленных аргументов. Хотя это понятно и просто, это неадекватно, когда мы имеем дело со сложным составом функций в дополнение к двоичному инфиксу, унарному префиксу и операторам постфикса. Когда произвольно сложная функциональная композиция имеет M-N = U непредоставленных аргументов, Символ отображает это на фактическую неленивую функцию, принимая аргументы U. Например:
Поскольку существует только 1 приведенный аргумент (N), и мы ожидаем 4 аргумента (M), следовательно, U = 3. Возможно, не сразу видно, как происходит картирование. Наивно ли читать слева направо? В нашем примере карты на a, второй на b, и последний? Карты для c. Тем не менее, для еще более сложных композиций, возможно, с операторами, добавленными в смесь, это становится довольно запутанным. Кроме того, это не так гибко: во многих случаях мы хотим сопоставить два или более неизвестных аргумента с одним держателем места. Чтобы избежать путаницы, а не использовать его? В качестве символа для непредставленных аргументов мы используем более содержательное и точное представление. Это реализуется путем предоставления численного представления фактического положения аргумента (1-N) в результирующей (правой) функции. Вот наш пересмотренный пример использования этой схемы:
Теперь вместо ? используются арг1, арг2 и арг3 в качестве заполнителей. Обратите внимание, что с помощью этой пересмотренной схемы мы теперь можем сопоставить два или более непредставленных аргумента с одним фактическим аргументом. Пример:
Обратите внимание, как мы сопоставили самый левый и самый правый неназванный аргумент с arg1. Следовательно, получившаяся функция правой руки теперь ожидает только два аргумента (arg1 и arg2) вместо трех. Вот несколько интересных фрагментов, где это может быть полезно:
Extra argumentsВ C и C++ функция может иметь дополнительные аргументы, которые вообще не используются самим телом функции. Например, функции обратного вызова могут предоставлять гораздо больше информации, чем требуется сразу. Эти дополнительные аргументы просто игнорируются. Феникс также позволяет принимать дополнительные аргументы. Например, вспомните нашу первоначальную функцию добавления:
Теперь мы знаем, что частичная оценка этой функции приводит к функции, которая ожидает 2 аргумента. Тем не менее, фреймворк немного более снисходительный и позволяет абоненту предоставить больше аргументов, чем требуется на самом деле. Таким образом, наша частично оцененная функция plus(arg1, arg2) фактически позволяет передавать 2 * или более * аргумента. Например, с:
В дальнейшем между аргументами могут даже игнорироваться. Пример:
Здесь аргументы 2, 3 и 4 игнорируются. Функция сложения принимает только первый аргумент (arg1) и пятый аргумент (arg5). Результат, конечно, шесть (6).
Copyright © 2001-2002 Joel de Guzman Статья Place holders раздела может быть полезна для разработчиков на c++ и boost. Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: ::
|
||||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |