Страницы

Поиск по вопросам

среда, 5 декабря 2018 г.

Функция, принимающая или возвращающая саму себя

В связи с вопросом о том, как описать тип функции, принимающей в качестве аргумента другую функцию, вспомнил вопрос, разбиравшийся Саттером - как объявить тип функции, которая принимает или возвращает саму себя (т.е. функцию того же типа). По тем временам решения как такового не было, были какие-то костыли и не более того. Изменилась ли как-то ситуация в C++11 и C++14? Можно ли более-менее честно объявить такую функцию?


Ответ

Можно сделать класс с оператором (). Выглядит неотличимо от функции (кстати, именно так и реализованны лямбда-функции):
#include "stdio.h"
int k = 0;
class MyFun{ public: auto operator () (){ k++; printf("Function called: %d
",k); return *this; } };
main(){ MyFun fun; auto x = fun()()()()()(); }
Вывод:
Function called: 1 Function called: 2 Function called: 3 Function called: 4 Function called: 5 Function called: 6

Комментариев нет:

Отправить комментарий