wyrazenia lambda a capture list

0

mam funkcje (wycialem parametry i logike zeby nie zaciemnialo kodu)

std::shared_ptr<Gui> Menu::prepareButton( Global_States state)
{
	std::shared_ptr<Gui> button( [&]()-> void { game->changeState(state); }));
	return button;
} 

czyli ma mi wzrocic buttona ktory zmieni stan gry na taki ktory jest w parametrze funkcji
Funkcje wywoluje tak

prepareButton(STATE_QUIT) 

albo tak

prepareButton(STATE_GAME) 

niestety... nie dziala w ten sposob. Lambda gdy zostaje wywolana to bierze wszystko jako referencje. Oczywiscie moge zamienic na = i wtedy wszystko bedzie przekazane przez value. Ale nie wiem czy tego chce... game jest typu std::shared_ptr<Game> wiec niby kopiowanie wskaznika nie jest az tak kosztowne, ale nadal na przyszlosc chcialbym sie dowiedziec

Jak zrobic by game zostal przekazany przez referencje a state przez value?

3
[&, state]()-> void { game->changeState(state); }
1

A tak nie zadziała?

[&game, state]()-> void { game->changeState(state); }

http://en.cppreference.com/w/cpp/language/lambda

0

@alagner @twonek

no wlasnie tak nie dziala :) tez tam bylem przed pisaniem tutaj posta ;)

1

@fasadin a ok, bo game jest polem, więc jedyny sposób, żeby go złapać to jest przez złapanie this, czyli to powinno przejść

[this, state]() ...
1

Przecież dokładnie jest napisane w błędzie co jest nie tak. Musisz dodać this, game jest przecież składnikiem klasy.

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