Другие языки программирования и технологии

с++, передача функции в параметры

я почти уверен, что это должно работать, если сюда приклеить верный синтаксис
участок кода:

int f(int x(int)) {return x(123);}
int main() {
cout<<f(int func(int x){return x;})<<endl;
return 0;
}

суть, думаю, понятна: объявить передаваемую функцию (func) прямо в скобках
можно ли так сделать, или я уже переоцениваю возможности говнокодинга в плюсах?
Николай Демкин
Николай Демкин
50 628
Ну вопервых лямбда функции (безимянные функции создоваемые внутри других функций) внесенны в с++ начиная с 11 стандарта. Во вторых передача указателя на функцию - вполне стандартная операция и реализуеться несколькими способами в том числе черех std::bind
Аркадий Шацкий
Аркадий Шацкий
35 594
Лучший ответ
Это не говнокодинг, такое есть в некоторых языках, например. в джаваскрипте. Но в С++ этого нету.
Александр Гончаров > в С++ этого нету.
> 170678 баллов
Ясно.
Если просто передавать адрес функции - то можно.
typedef int f_addr(int);
int f2(int a) { return a*a;}
int f(f_addr x) {return x(123);}
int main() {
cout<<f(f2)<<endl;
return 0;
}
Передавать функцию как у вас - нет, потому что в С++ нет такой фишки, она вроде называется "замыкания". "Замыкание" - это что-то вроде переменной, которая содержит в себе тело функции.
AT
Abdilla Tashbekov
25 952
Николай Демкин не, я хочу именно прямо в скобках объявить эту функцию
объявляя функцию вне скобок, я её и через указатель, и без него передать могу:

int f(int x) {return x;}
int ff(int x(int)) {return x(123);}
int main() {
cout<<ff(f)<<endl;
return 0;
}
Открой для себя макросы, божественный инструмент - результат во время компиляции, с помощью дефайнов можно делать удивительные вещи ;)
#include < iostream >
int main()
{
#define ACTION(first_type,second_type,result,operation) \
{ \
result = first_type operation second_type;\
}
int result;
int first = 10,second = 5;
ACTION(first,second,result,*);
std::cout << result << std::endl;
ACTION(first,second,result,/);
std::cout << result << std::endl;
ACTION(first,second,result,+);
std::cout << result << std::endl;
ACTION(first,second,result,-);
std::cout << result << std::endl;
return 0;
}
int f(int (*g)(int)) { return g(123); }

int main() {
cout << f([](int x){ return x; }) << endl;
return 0;
}

http://ideone.com/5pbm2s
FG
Firdavs Ganiev
2 948
Изучай Бреин Фак!