Co w razie błędu zwrócić w metodzie szablonowej?

0

Dobry wieczór. Wiem, że pytanie może wydawać się głupie, ale zastanawiam się, co mogę zwrócić w mojej metodzie szablonowej, gdy natrafię na jakąś przeszkodę (w tym przypadku brak kolejnego elementu listy)? Ze względu na szablon, musi to być coś uniwersalnego, a zarazem bezpiecznego.

template<typename T>
elementtype<T> pointerList<T>::Retrieve(position<T> p)
{
    position<T> tmp=p->next;
    if(tmp!=NULL) return tmp->element;
    else return 123454321;
}

Ten return 123454321 jest pozostałością po tym, że klasa była tylko dla int.

2

Jest kilka potencjalnych możliwości.

  • Jeżeli ta przeszkoda polega na naruszeniu tzw. niezmiennika (invariant) to powinieneś użyć makra assert: assert(tmp != nullptr);
  • Jeśli jest to sytuacja wyjątkowa, ale chcesz wywołującemu dać możliwość jej obsługi to naturalnym sposobem jest rzucenie wyjątku. Można wybrać coś z biblioteki standardowej: https://en.cppreference.com/w/cpp/error/exception
  • Możesz zwrócić wartość domyślną return elementtype<T>(). Będzie to działać również dla typów podstawowych. Natomiast nie zadziała dla typów nie mających konstruktora bezparametrowego.
0

Jak dla mnie pytanie pozbawione istotnego kontekstu.
Wygląda na problem XY.

0

Cały program to implementacja stosu, której chcę użyć do konwersji na ONP. Pytanie powstało ze względu na to, że mogłoby dojść do hipotetycznej sytuacji, że ktoś próbuje pobrać element z pustego stosu, tj. bez uprzedniego wywołania if(!stack.isEmpty().

0

Dziękuję za tak liczne odpowiedzi. Póki co moja funkcja zwraca wartość domyślną i zabezpieczyłem program przed wystąpieniem takiej sytuacji, ale prawdopodobnie zmienię to na std::out_of_range.

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