Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
 Оптимизация вывода  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

Предположим, есть функция foo(), возвращающая std::ostream& и функция bar() с тяжёлыми
вычислениями внутри. Есть ли возможность изнутри foo предотвратить вызов bar в коде типа
такого:
foo() << bar();

Posted via ActualForum NNTP Server 1.5

6 янв 21, 15:24    [22259421]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация вывода  [new]
petrav
Member

Откуда:
Сообщений: 2861
Dimitry Sibiryakov,

Ну если foo() вернёт прокси класс вокруг std::ostream&. А bar() вернёт функтор для вызова вычислений. То можно. Синтаксически ничего не изменится.
6 янв 21, 15:52    [22259448]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация вывода  [new]
petrav
Member

Откуда:
Сообщений: 2861
Dimitry Sibiryakov

Предположим, есть функция foo(), возвращающая std::ostream& и функция bar() с тяжёлыми
вычислениями внутри. Есть ли возможность изнутри foo предотвратить вызов bar в коде типа
такого:
foo() << bar();


Впрочем foo() может продолжать возвращать std::ostream&. Достаточно что бы bar() вернул прокси-класс (точнее объект), который и будет решать вызывать ли вычисления и что-то логировать.
6 янв 21, 16:08    [22259460]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация вывода  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
В обобщенных лямбда-языках как-то так.

foo(() -> bar())


В новых сях там немного другой синтаксис. С квадратными скобочками кажется.
7 янв 21, 03:25    [22259751]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация вывода  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6626
Dimitry Sibiryakov,

#define foo() if (foo_enabled()) foo_impl()

foo() << bar(); // if (foo_enabled()) foo_impl() << bar()
7 янв 21, 12:15    [22259837]     Ответить | Цитировать Сообщить модератору
Все форумы / C++ Ответить