#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
Комментариев нет:
Отправить комментарий