Страницы

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

пятница, 27 декабря 2019 г.

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

#cpp11 #cpp14


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


Ответы

Ответ 1



Можно сделать класс с оператором (). Выглядит неотличимо от функции (кстати, именно так и реализованны лямбда-функции): #include "stdio.h" int k = 0; class MyFun{ public: auto operator () (){ k++; printf("Function called: %d\n",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

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

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