Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zestaw SDK zasad zawiera jedną klasę obserwatora. Elementy członkowskie obserwatora są wirtualne i powinny być zastępowane w celu obsługi wywołań zwrotnych dla operacji asynchronicznych.
Po zakończeniu OnXxx() operacji asynchronicznej wywoływana jest funkcja składowa odpowiadająca wynikowi. Przykłady to OnLoadSuccess(), OnLoadFailure()i OnAddEngineSuccess() dla .mip::Profile::Observer
W poniższych przykładach pokazano wzorzec obietnicy/przyszłości, który jest również używany przez przykłady zestawu SDK i można go rozszerzyć w celu zaimplementowania żądanego zachowania wywołania zwrotnego.
Implementacja obserwatora profilu
W poniższym przykładzie utworzyliśmy klasę, ProfileObserver która pochodzi z klasy mip::Profile::Observer. Funkcje składowe zostały zastąpione, aby używać wzorca przyszłości/obietnicy używanego w próbkach.
Uwaga: poniższe przykłady są implementowane tylko częściowo i nie obejmują przesłonięć powiązanych mip::ProfileEngine obserwatorów.
profile_observer.h
W nagłówku definiujemy ProfileObserverelement , wyprowadzając z mip::Profile::Observer, a następnie zastępujemy poszczególne funkcje składowe.
class ProfileObserver final : public mip::Profile::Observer {
public:
ProfileObserver() { }
void OnLoadSuccess(const std::shared_ptr<mip::Profile>& profile, const std::shared_ptr<void>& context) override;
void OnLoadFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) override;
//TODO: Implement remaining members
};
profile_observer.cpp
W samej implementacji definiujemy akcję, która ma być wykonywana dla każdej funkcji składowej obserwatora.
Każdy element członkowski akceptuje dwa parametry. Pierwszy to udostępniony wskaźnik do klasy obsługiwanej przez funkcję. ProfileObserver::OnLoadSuccess oczekuje się, że otrzyma element mip::Profile. ProfileObserver::OnAddEngineSuccess oczekiwany mip::ProfileEngineprzez program .
Drugi to wskaźnik współużytkowany do kontekstu. W naszej implementacji kontekst jest odwołaniem do elementu , przekazanego std::promisejako shared_ptr<void>. Pierwszy wiersz funkcji rzutuje to na std::promise, a następnie przechowywany w obiekcie o nazwie promise.
Na koniec przyszłość jest gotowa, ustawiając promise->set_value() obiekt i przekazując go mip::Profile .
#include "profile_observer.h"
#include <future>
//Called when Profile is successfully loaded
void ProfileObserver::OnLoadSuccess(const std::shared_ptr<mip::Profile>& profile, const std::shared_ptr<void>& context) {
//cast context to promise
auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::Profile>>>(context);
//set promise value to profile
promise->set_value(profile);
}
//Called when Profile fails to load
void ProfileObserver::OnLoadFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) {
auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::Profile>>>(context);
promise->set_exception(error);
}
//TODO: Implement remaining observer members
Podczas wykonywania dowolnej operacji asynchronicznej implementacja obserwatora jest przekazywana do konstruktora ustawień lub samej funkcji asynchronicznej.