Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Princip-SDK:et innehåller en observatörsklass. Åsidosätt virtuella observatörsmedlemmar för att hantera återanrop för asynkrona åtgärder.
När en asynkron åtgärd slutförs anropar SDK medlemsfunktionen OnXxx() som motsvarar resultatet. Exempel är OnLoadSuccess(), OnLoadFailure()och OnAddEngineSuccess() för mip::PolicyProfile::Observer.
Följande exempel visar mönstret för löfte/framtid. SDK-exemplen använder också det här mönstret, och du kan utöka det för att implementera önskat återanropsbeteende.
Implementering av profilobservatör
I följande exempel skapas en klass, ProfileObserver, som härleds från mip::PolicyProfile::Observer. Medlemsfunktionerna åsidosätter basklassen för att använda det framtids-/löftesmönster som används i exemplen.
Note
Följande exempel implementerar endast en del av observatörsklassen och inkluderar inte åsidosättningar för de relaterade observatörerna mip::PolicyEngine .
profile_observer.h
Rubriken definierar ProfileObserver, härleder den från mip::PolicyProfile::Observeroch åsidosätter sedan var och en av medlemsfunktionerna.
class ProfileObserver final : public mip::PolicyProfile::Observer {
public:
ProfileObserver() { }
void OnLoadSuccess(const std::shared_ptr<mip::PolicyProfile>& 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
Implementeringen definierar en åtgärd som ska vidtas för varje observatörsmedlemsfunktion.
Varje medlem accepterar två parametrar. Den första är en delad pekare till klassen som funktionen hanterar.
ProfileObserver::OnLoadSuccess förväntar sig att få en mip::PolicyProfile.
ProfileObserver::OnAddEngineSuccess förväntar sig mip::PolicyEngine.
Den andra är en delad pekare till kontexten. I den här implementeringen är kontexten en referens till en std::promise, som skickas in som shared_ptr<void>. Den första raden i funktionen omvandlar det här värdet till std::promiseoch lagrar det sedan i ett objekt med namnet promise.
Slutligen gör koden framtiden redo genom att ange promise->set_value() och skicka objektet mip::PolicyProfile .
#include "profile_observer.h"
#include <future>
//Called when Profile is successfully loaded
void ProfileObserver::OnLoadSuccess(const std::shared_ptr<mip::PolicyProfile>& profile, const std::shared_ptr<void>& context) {
//cast context to promise
auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::PolicyProfile>>>(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::PolicyProfile>>>(context);
promise->set_exception(error);
}
//TODO: Implement remaining observer members
När du utför en asynkron åtgärd skickar du observer-implementeringen till själva inställningskonstruktorn eller asynkrona funktionen.
Nästa steg
- Utforska MIP Policy SDK C++-exemplet på GitHub.