Как передать функцию с аргументами в другую функцию?

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?"); } );
}
→ Ссылка