я почти уверен, что это должно работать, если сюда приклеить верный синтаксис
участок кода:
int f(int x(int)) {return x(123);}
int main() {
cout<<f(int func(int x){return x;})<<endl;
return 0;
}
суть, думаю, понятна: объявить передаваемую функцию (func) прямо в скобках
можно ли так сделать, или я уже переоцениваю возможности говнокодинга в плюсах?
Другие языки программирования и технологии
с++, передача функции в параметры
Ну вопервых лямбда функции (безимянные функции создоваемые внутри других функций) внесенны в с++ начиная с 11 стандарта. Во вторых передача указателя на функцию - вполне стандартная операция и реализуеться несколькими способами в том числе черех std::bind
Это не говнокодинг, такое есть в некоторых языках, например. в джаваскрипте. Но в С++ этого нету.
Если просто передавать адрес функции - то можно.
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;
}
Передавать функцию как у вас - нет, потому что в С++ нет такой фишки, она вроде называется "замыкания". "Замыкание" - это что-то вроде переменной, которая содержит в себе тело функции.
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;
}
Передавать функцию как у вас - нет, потому что в С++ нет такой фишки, она вроде называется "замыкания". "Замыкание" - это что-то вроде переменной, которая содержит в себе тело функции.
Николай Демкин
не, я хочу именно прямо в скобках объявить эту функцию
объявляя функцию вне скобок, я её и через указатель, и без него передать могу:
int f(int x) {return x;}
int ff(int x(int)) {return x(123);}
int main() {
cout<<ff(f)<<endl;
return 0;
}
объявляя функцию вне скобок, я её и через указатель, и без него передать могу:
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;
}
#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
int main() {
cout << f([](int x){ return x; }) << endl;
return 0;
}
http://ideone.com/5pbm2s
Изучай Бреин Фак!
Похожие вопросы
- Можно в функции switch параметром использовать return? С++
- Вопрос насчет объявления и параметра функции в C++
- Как передать функцию в качестве параметра другой функции на C++?
- Оконное приложение на WinAPI, вопрос про параметры функции WndProc. Язык программирования Си.
- Привет, помогите с программированием на СИ, передача массива в функцию..
- Есть ли фактические параметры в рекурсивной функции? В ней же нет вызова функции?
- Help! С функцией PlaySound на С#!!! Как остановить воспроизведение при нажатии на кнопку? Какие параметры должны быть???
- В программировании в функциях аргумент и параметр это одно и то же?
- Аргументы и параметры функции-это синонимы?
- C++: И снова передача двумерных массив в функцию.. . каким макаром это сделать?
> 170678 баллов
Ясно.