Witam, piszę pewien projekt, mam klasę bazową FlockingAlgorithm::FlockingObstacle oraz pochodną SeparationBall.
Taka konwersja jest możliwa:
FlockingAlgorithm::FlockingObstacle obj = *(obstaclesList.begin());
Natomiast ten zapis powoduje już błąd kompilacji:
std::list<FlockingAlgorithm::FlockingObstacle> lst(obstaclesList);
obstaclesList:
std::list<SeparationBall> obstaclesList;
Występuje komunikat:
żadne wystąpienie konstruktora "std::list<_Ty, _Alloc>::list [gdzie _Ty=FlockingAlgorithm::FlockingObstacle, _Alloc=std::allocator<FlockingAlgorithm::FlockingObstacle>]" nie jest zgodne z listą argumentów
Wiem że rzutowania mogę dokonywać dla każdego elementu listy z osobna, zależy mi jednak by zrobić to jedną instrukcją ponieważ lista obstaclesList jest przekazywana jak argument dla pewnej funkcji.
Dodam jeszcze że wcześniej obecna klasa pochodna nie dziedziczyła z niczego i konwersji dokonywałem tak:
std::list<FlockingObstacle> tempObstaclesList;
std::transform(obstaclesList.begin(), obstaclesList.end(),
std::front_insert_iterator<std::list<FlockingObstacle>>(tempObstaclesList),
std::mem_fn(&SeparationBall::convertToFlockingObstacle));
to jednak jest chyba za mało wydajne za każdym obiegiem pętli wykonywać ten kod...
Będę wam bardzo wdzięczny za pomoc i pozdrawiam :)