Как передать функцию с аргументами в другую функцию?
gfx.renderFF(message.info("Hello!", "I am console,", "how are you?"));
в свою очередь
void renderFF( void (*draw_fn)(String &a, String &b, String &c) )
{
uint32_t time;
time = millis() + 10;
do {
u8g2.clearBuffer();
draw_fn();
u8g2.sendBuffer();
} while ( millis() < time );
}
Ответы (2 шт):
Автор решения: Chorkov
→ Ссылка
Решение в стиле C++11:
void renderFF( std::function<void(void)> draw_fn )
{ ...
draw_fn();
...
}
gfx.renderFF( [&message](){
message.info("Hello!", "I am console,", "how are you?");
} );
В стиле С:
void renderFF( void (*draw_fn)(void*), void* draw_fn_args )
{ ...
draw_fn(draw_fn_args);
...
}
void renderFF_callback(void*arg)
{
Message& message=*static_cast<Message*>(arg);
message.info("Hello!", "I am console,", "how are you?");
};
gfx.renderFF( renderFF_callback, &message );
Автор решения: AlexGlebe
→ Ссылка
Передаёте функциональный объект и вызываете. Аргументы к этому объекту можно задать на первом уровне (в main перед вызовом renderFF) , на втором уровне, внутри функции renderFF и на третьем уровне уже в тексте кода лямбда вызова.
[arg1] - захватываем аргумент из функции main
fun(arg2) - передаём аргумент в функции renderFF
info(arg1,arg2, "how are you?" ) - аргумент уже в коде лямбда
# include <iostream>
# include <functional>
void renderFF( std::function<void(char const * arg2)> fun )
{
char const * arg2 = "I am console," ;
fun(arg2);
}
void info(char const*a,char const*b,char const*c){
std::cout<<a<<b<<c<<std::endl;
}
int main()
{
char const * arg1 = "Hello!" ;
renderFF ( [arg1](char const * arg2) {
info(arg1, arg2, "how are you?"); } );
}