Przechowywanie funkcji w zmiennych

0

Witam.

Przeszukałem wiele stron o tematyce tego typu ale nigdzie nie znalazłem pomocy.
Chciałbym stworzyć sobie klasę w C++ do której będzie można przekazywać funkcje (taka klasa biblioteczna do modułu Arduino).

W języku C# było to bardzo proste:

public delegate void MyFunction( object[] args );
public MyFunction myFunction;

public void setFunction( MyFunction function ) {
  this.myFunction = function;
}

Pytanie moje jest, jak coś takiego wykonać w C++. Pewnie będzie wymagana zabawa z alokacją pamięci? :/

6

Użyj po prostu wskaźników na funkcje.

using handler_t = void(*)(std::string const&);

struct foo
{
    handler_t handler;
};

int main()
{
    foo f;
    f.handler = [](std::string const& str) { std::cout << str << std::endl; };

    f.handler("bar");
}

Alternatywnie, możesz użyć std::function, ale jeśli nie zamierzasz przechowywać obiektów funkcyjnych ze stanem, to nie ma to sensu - std::function ma pewien narzut wydajnościowy (za to jest znacznie bardziej elastycznym rozwiązaniem).

Aha, polecam lekturę: https://dev.krzaq.cc/post/readable-function-pointers/

1 użytkowników online, w tym zalogowanych: 0, gości: 1