Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Dosya SDK'sı iki gözlemci sınıfı içerir. Olay geri çağırmalarını işlemek için sanal gözlemci üyelerini geçersiz kılabilirsiniz.
Zaman uyumsuz bir işlem tamamlandığında SDK, sonuca karşılık gelen üye işlevini çağırır OnXxx() .
OnLoadSuccess() için örnekler OnLoadFailure(), OnAddEngineSuccess() ve mip::FileProfile::Observer'dir.
Bu örnekler, promise/future desenini gösterir. SDK örnekleri de bu deseni kullanır ve istediğiniz geri çağırma davranışını uygulamak için genişletebilirsiniz.
Dosya Profili gözlemci uygulaması
Aşağıdaki örnek, mip::FileProfile::Observer'den türeyen ProfileObserver sınıfını oluşturur. Üye işlevleri, örneklerde kullanılan future/promise desenini kullanmak için temel sınıfı geçersiz kılar.
Note
Örnekler gözlemci sınıfının yalnızca bir bölümünü uygular ve ilgili gözlemciler için mip::FileEngine geçersiz kılmalar içermez.
profile_observer.h
Başlık, ProfileObserver öğesini tanımlar, bunu mip::FileProfile::Observer öğesinden türetir ve ardından üye işlevlerin her birini geçersiz kılar.
class ProfileObserver final : public mip::FileProfile::Observer {
public:
ProfileObserver() { }
void OnLoadSuccess(const std::shared_ptr<mip::FileProfile>& profile, const std::shared_ptr<void>& context) override;
void OnLoadFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) override;
//TODO: Implement mip::FileEngine related observers.
};
profile_observer.cpp
Uygulama, her gözlemci üye işlevi için gerçekleştirecek bir eylemi tanımlar.
Her üye iki parametre kabul eder. birincisi, işlevin işlediği sınıfın paylaşılan bir işaretçisidir.
ProfileObserver::OnLoadSuccess bir mip::FileProfile almayı bekler.
ProfileObserver::OnAddEngineSuccess, mip::FileEngine bekliyor.
İkincisi, bağlama ilişkin paylaşılan bir işaretçidir. Bu uygulamada bağlam, std::promise olarak başvuru yoluyla geçirilen bir std::shared_ptr<void> başvurusudur. İşlevin ilk satırı bu değeri öğesine std::promiseatar ve adlı bir nesnede promisedepolar.
Son olarak, kod promise->set_value() ayarlayıp mip::FileProfile nesnesini aktararak geleceğe hazır hâle gelir.
#include "profile_observer.h"
#include <future>
//Called when FileProfile is successfully loaded
void ProfileObserver::OnLoadSuccess(const std::shared_ptr<mip::FileProfile>& profile, const std::shared_ptr<void>& context) {
//cast context to promise
auto promise =
std::static_pointer_cast<std::promise<std::shared_ptr<mip::FileProfile>>>(context);
//set promise value to profile
promise->set_value(profile);
}
//Called when FileProfile 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::FileProfile>>>(context);
promise->set_exception(error);
}
//TODO: Implement mip::FileEngine related observers.
Herhangi bir SDK sınıfının örneğini oluştururken veya eşzamansız işlemler gerçekleştiren bir işlev kullanırken, gözlemci uygulamanızı ayarlar oluşturucusuna ya da doğrudan eşzamansız işlevin kendisine iletin.
mip::FileProfile::Settings nesnesinin örneğini oluşturduğunuzda, oluşturucu parametrelerden biri olarak mip::FileProfile::Observer değerini kabul eder. Bu örnek, bir mip::FileProfile::Settings oluşturucuda kullanılan özel ProfileObserveröğesini gösterir.
FileHandler gözlemci uygulaması
Profil gözlemcisine benzer şekilde, mip::FileHandler dosya işlemleri sırasında zaman uyumsuz olay bildirimlerini işlemek için bir mip::FileHandler::Observer sınıf uygular. Uygulama, önceki uygulamaya benzer. Aşağıdaki örnek kısmen tanımlar FileHandlerObserver.
file_handler_observer.h
#include "mip/file/file_handler.h"
class FileHandlerObserver final : public mip::FileHandler::Observer {
public:
void OnCreateFileHandlerSuccess(
const std::shared_ptr<mip::FileHandler>& fileHandler,
const std::shared_ptr<void>& context) override;
void OnCreateFileHandlerFailure(
const std::exception_ptr& error,
const std::shared_ptr<void>& context) override;
//TODO: override remaining member functions inherited from mip::FileHandler::Observer
};
file_handler_observer.cpp
Bu örnek yalnızca ilk iki işlevi içerir, ancak geri kalan işlevler de bu işlevlere ve ProfileObserver öğesine benzer bir yapı kullanır.
#include "file_handler_observer.h"
void FileHandlerObserver::OnCreateFileHandlerSuccess(const std::shared_ptr<mip::FileHandler>& fileHandler, const std::shared_ptr<void>& context) {
auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::FileHandler>>>(context);
promise->set_value(fileHandler);
}
void FileHandlerObserver::OnCreateFileHandlerFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) {
auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::FileHandler>>>(context);
promise->set_exception(error);
}
//TODO: override remaining member functions inherited from mip::FileHandler::Observer
Sonraki Adımlar
- GitHub'da MIP Dosya SDK'sı C++ örneğini keşfedin.