В связи с вопросом о том, как описать тип функции, принимающей в качестве аргумента другую функцию, вспомнил вопрос, разбиравшийся Саттером - как объявить тип функции, которая принимает или возвращает саму себя (т.е. функцию того же типа). По тем временам решения как такового не было, были какие-то костыли и не более того. Изменилась ли как-то ситуация в 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
Комментариев нет:
Отправить комментарий