Difference between revisions of "User:Lerom"

From Biowikifarm Metawiki
Jump to: navigation, search
m (Creating user page for new user.)
 
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
  
 
{{DEFAULTSORT:Lerom}}
 
{{DEFAULTSORT:Lerom}}
 +
<big><big><syntaxhighlight lang="cpp">
 +
template <typename T>
 +
inline void callWithMax(const T& a, const T& b) // Поскольку мы не знаем,
 +
{                                              // что есть T, то передаем
 +
    f(a > b ? a : b);                          // его по ссылке на const -
 +
}                                              // см. параграф 20
 +
</syntaxhighlight></big></big>
 +
 +
Этот шаблон генерирует целое семейство функций, каждая из которых принимает два аргумента одного и того же типа и вызывает f с наибольшим из них. Нет необходимости заключать параметры в скобки внутри тела функции, не нужно заботиться о многократном вычислении параметров и т. д. Более того, поскольку callWithMax – настоящая функция, на нее распространяются правила областей действия и контроля доступа. Например, можно говорить о встроенной функции, являющейся закрытым членом класса. Описать нечто подобное с помощью макроса невозможно.
 +
Наличие const, enum и inline резко снижает потребность в препроцессоре (особенно это относится к #define), но не устраняет ее полностью. Директива #include остается существенной, а #ifdef/#ifndef продолжают играть важную роль в управлении компиляцией. Пока еще не время отказываться от препроцессора, но определенно стоит задуматься, как избавиться от него в дальнейшем.

Latest revision as of 13:39, 5 June 2013


template <typename T>
inline void callWithMax(const T& a, const T& b) // Поскольку мы не знаем,
{                                               // что есть T, то передаем
    f(a > b ? a : b);                           // его по ссылке на const -
}                                               // см. параграф 20

Этот шаблон генерирует целое семейство функций, каждая из которых принимает два аргумента одного и того же типа и вызывает f с наибольшим из них. Нет необходимости заключать параметры в скобки внутри тела функции, не нужно заботиться о многократном вычислении параметров и т. д. Более того, поскольку callWithMax – настоящая функция, на нее распространяются правила областей действия и контроля доступа. Например, можно говорить о встроенной функции, являющейся закрытым членом класса. Описать нечто подобное с помощью макроса невозможно. Наличие const, enum и inline резко снижает потребность в препроцессоре (особенно это относится к #define), но не устраняет ее полностью. Директива #include остается существенной, а #ifdef/#ifndef продолжают играть важную роль в управлении компиляцией. Пока еще не время отказываться от препроцессора, но определенно стоит задуматься, как избавиться от него в дальнейшем.