• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Konwersja raw pointer -> smart pointer

0 głosów
45 wizyt
pytanie zadane 11 stycznia w C i C++ przez Munvik Mądrala (5,520 p.)

Cześć. Mam kłopot, bo muszę usunąć z vectora smartPointerów element podany w argumencie jako raw Pointer. Narazie to wygląda tak jak na dole ale nie działa bo oczywiście "no conversion from shared_ptr<T> to monster * ".

std::vector<std::shared_ptr<monster>> monsters; //siedzi w klasie

void wave::removeMonster(monster  *m)
{
	std::vector<monster>::iterator it = std::find(monsters.begin(), monsters.end(), m);

	if (it != monsters.end())
	{
		monsters.erase(it);
	}
}

Prosiłbym od razu wyjaśnić co i dlaczego

1 odpowiedź

+1 głos
odpowiedź 11 stycznia przez Criss VIP (102,700 p.)
wybrane 11 stycznia przez Munvik
 
Najlepsza

Dokładnie to co jest napisane

no conversion from shared_ptr<T> to monster * 

 Uzyj std::find_if:

auto it = std::find_if(monsters.begin(), monsters.end(),
   [&](const std::shared_ptr<Monster> & sptr) { return sptr.get() == m; });

 

komentarz 11 stycznia przez Munvik Mądrala (5,520 p.)
Wow, działa xD

Tylko jak ?
komentarz 11 stycznia przez Criss VIP (102,700 p.)
No przecież masz cały kod XD wejdź w dokumentacje std::find_if

find_if na kazdym elemencie vectora wywołuje przekazana w ostatnim argumencie funkcje. Jeśli zwróci true, to find_if zwraca ten iterator.

Za pomocą get() dostajesz sie do "raw pointera" (czyli to czego potrzebujemy) którego opakowuje std::shared_ptr. Uzyskany pointer porównujemy z pointerem m.

Szczerze mówiąc nie wiem czego tu możesz nie rozumieć, więc powiedz konkretnie to ci wytłumacze :P
komentarz 11 stycznia przez Munvik Mądrala (5,520 p.)
[&](const std::shared_ptr<Monster> & sptr)

Co to jest [&] ?

komentarz 11 stycznia przez unknown Nałogowiec (30,020 p.)
capture-list lambdy. Czyli jakie zmienne ze środowiska wywołania można używać w lambdzie. W tym przypadku wszystkie zmienne są przechwytywane przez referencje.

Podobne pytania

0 głosów
1 odpowiedź 39 wizyt
pytanie zadane 25 stycznia w Offtop przez jegor377 Stary wyjadacz (12,730 p.)
0 głosów
1 odpowiedź 75 wizyt
0 głosów
1 odpowiedź 118 wizyt
pytanie zadane 16 listopada 2015 w C i C++ przez dariusz Obywatel (1,360 p.)
...