Jak przekazać std::function do std::signal?

0

Witam.

Jak przekazać std::function<void(int)> do std::signal?
Przy próbie dostaję taki błąd:

main.cpp:23:29: error: cannot convert 'std::function<void(int)>' to '__p_sig_fn_t {aka void (*)(int)}' for argument '2' to 'void (* signal(int, __p_sig_fn_t))(int)' std::signal(SIGINT, >func);

próbowałem to castować statycznie i ... reinterpret (:d), co nie dało zadowalającego mnie efektu.

Co mogę zrobić w tym przypadku?

Pozdrawiam.

0

Qt5 z C++11 connect obsługuje lambdy, więc powinno łyknąć bez kłopotu.
Podaj konkretny przykład. DAJ KOD!

2

Nie da się, to niekompatybilne typy. Musisz przekazać funkcję bezstanową.

0
std::function<void(int)> fun = somefunc_thatIsNotNeeded;
std::signal(SIGINT, func);

Proszę bardzo.

1

Tak jak pisze @kq nie da się.
Jedyny sposób to zmienna globalna, która powinna być znienawidzona.
do singlal, możesz przekazać lambdę bezstanową (nie może przechwytywać zmiennych).

0

Co mi tu do kija może dać zmienna globalna?

0

Jest jedynym sposobem przekazania stanu do funkcji, która sama takiego nie ma.

0

No dobra, w takim razie czymże jest "stan" w języku C++?

PS @MarekR22 przepraszam za nerwy, trochę zmęczony jestem.

0

Są to dane, które funkcja przechowuje.

int x = 4;
function<void()> print_x = [&x]{ cout << x; };
print_x();
x = 2;
print_x();

Tutaj print_x ma stan - referencję do zewnętrznej zmiennej. W przypadku funkcji bez stanu, może ona operować wyłącznie na swoich argumentach i wartościach widocznych globalnie (czyli też zmienne statyczne/thread_local), więc powyższe nie byłoby możliwe.

1

Jak piszesz o std::function to w domyśle jest to funkcja mająca stan (lamdba przechwytująca jakąś zmienną, albo std::bind).
Jeśli nie masz żadnej zmiennej powiązanej z std::function to wyczuwam problem XY.

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