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.
Belirli türler için C++/WinRT, bir parametreyi öngörülen API'ye geçirmek için alternatif yöntemler sağlar. Bu parametre kabul eden sınıflar winrt::p aram ad alanına yerleştirilir. Yalnızca C++/WinRT tarafından oluşturulan kod bu sınıfları kullanmalıdır; bunları kendi işlevlerinizde ve yöntemlerinizde kullanmayın.
Önemli
winrt::param ad alanındaki türleri kendiniz kullanmamalısınız. Bunlar projeksiyonun yararına.
Bu alternatiflerden bazıları eşzamanlı ve eşzamansız çağrıları birbirinden ayırır. Eşzamansız çağrılar için olan sürüm, değerlerin eşzamansız çağrı tamamlanana kadar geçerli kalmasını ve değişmemesini sağlamak amacıyla genellikle parametre verilerinin sahipliğini devralır. Ancak unutmayın ki bu koruma, başka bir iş parçacığından yapılan koleksiyon değişiklikleri için geçerli değildir. Bunu önlemek sizin sorumluluğunuzdadır.
Dize parametreleri için alternatifler
winrt::param::hstring, parametrelerin winrt::hstring olarak geçirilmesini basitleştirir. winrt::hstring'e ek olarak, bu alternatifler de kabul edilir:
| Alternatif | Notes |
|---|---|
{} |
Boş bir dize. |
| std::wstring_view | Görünümün ardından bir null sonlandırıcı gelmelidir. |
| std::wstring | |
| wchar_t const* | Null olarak sonlandırılan bir dize. |
Boş diziyi temsil etmesi için nullptr geçiremezsiniz. Bunun yerine L"" veya {} kullanın.
Derleyici, wcslen ifadesini dize sabitleri üzerinde derleme zamanında nasıl değerlendireceğini bilir. Dolayısıyla, değişmez değerler için L"Name"sv ve L"Name" eşdeğerdir.
std::wstring_view nesnelerinin null olarak sonlandırılmadığını, ancak C++/WinRT'nin görünümün sonundan sonraki karakterin null olmasını gerektirdiğini unutmayın. std::wstring_view için null ile sonlandırılmamış bir değer geçirirseniz işlem sonlanır.
Yinelenebilir parametreler için alternatifler
winrt::param::iterable<T> ve winrt::param::async_iterable<T>, parametreleri IIterable<T> olarak geçirmeyi basitleştirir.
Windows Çalışma Zamanı koleksiyonları IVector<T> ve IVectorView<T>, IIterable<T'yi> zaten destekliyor. Windows Çalışma Zamanı koleksiyonları IMap<K, V> ve IMapView<K, V> zaten IIterable<IKeyValuePair<K, V'yi>> destekliyor.
IIterable<T'ye> ek olarak aşağıdaki alternatifler de kabul edilir. Bazı alternatiflerin yalnızca zaman uyumlu yöntemler için kullanılabildiğini unutmayın.
| Alternatif | Sync | Async | Notes |
|---|---|---|---|
| std::vector<T> const& | Yes | No | |
| std::vector<T>& | Yes | Yes | İçerik geçici bir yinelenebilir nesneye taşınır. |
| std::initializer_list<T> | Yes | Yes | Eşzamansız sürüm öğeleri kopyalar. |
| std::initializer_list<U> | Yes | No | U, T'ye dönüştürülebilir olmalıdır. |
{ begin, end } |
Yes | No |
begin ve endileri yineleyiciler olmalı ve *beginT'ye dönüştürülebilir olmalıdır. |
Çift yineleyici, yukarıdaki senaryoların hiçbirine uymayan bir koleksiyonunuz olduğu durumlarda daha genel olarak çalışır. Bunun üzerinde yineleme yapabilir ve T'ye dönüştürülebilecek şeyler üretebilirsiniz. Örneğin, U'un < dönüştürülebileceği bir < veya std::vector>U'nuz olabilir.
Aşağıdaki örnekte, SetStorageItems yöntemi IIterable<IStorageItem> bekler. Çift yineleyici kalıbı, diğer koleksiyon türlerini aktarabilmemizi sağlar.
// IVector of derived types.
winrt::Windows::Foundation::Collections::IVector<winrt::Windows::Storage::StorageFile>
storageFiles{ /* initialization elided */ };
dataPackage.SetStorageItems(storageFiles); // doesn't work
dataPackage.SetStorageItems({ storageFiles.begin(), storageFiles.end() }); // works
// Array of derived types.
std::array<winrt::Windows::Storage::StorageFile, 3>
storageFiles{ /* initialization elided */ };
dataPackage.SetStorageItems(storageFiles); // doesn't work
dataPackage.SetStorageItems({ storageFiles.begin(), storageFiles.end() }); // works
IIterable<IKeyValuePair<K, V>> için aşağıdaki alternatifler kabul edilir. Bazı alternatiflerin yalnızca zaman uyumlu yöntemler için kullanılabildiğini unutmayın.
| Alternatif | Sync | Async | Notes |
|---|---|---|---|
| std::map<K, V> const& | Yes | No | |
| std::map<K, V>&& | Yes | Yes | İçerikler geçici bir yinelenebilir nesneye taşınır. |
| std::unordered_map<K, V> const& | Yes | No | |
| std::unordered_map<K, V>&& | Yes | Yes | İçerikler geçici bir yinelenebilir nesneye taşınır. |
| std::initializer_list<std::pair<K, V>> | Yes | Yes | Eşzamansız sürüm, listeyi geçici bir yinelenebilir nesneye kopyalar. |
{ begin, end } |
Yes | No |
begin ve endileri yineleyiciler olmalı ve begin->firstbegin->second sırasıyla K ve V'ye dönüştürülebilir olmalıdır. |
Vektör görünümü parametreleri için alternatifler
winrt::p aram::vector_view<T> ve winrt::p aram::async_vector_view<T> , parametreleri IVectorView<T> olarak geçirmeyi basitleştirir.
Bir IVector<T> öğesinden IVectorView<T> almak için IVector<T>::GetView'u çağırabilirsiniz.
IVectorView<T'ye> ek olarak aşağıdaki alternatifler de kabul edilir. Bazı alternatiflerin yalnızca zaman uyumlu yöntemler için kullanılabildiğini unutmayın.
| Alternatif | Sync | Async | Notes |
|---|---|---|---|
| std::vector<T> const& | Yes | No | |
| std::vector<T>& | Yes | Yes | İçerikler geçici bir görünüme taşınır. |
| std::initializer_list<T> | Yes | Yes | Eşzamansız sürüm, listeyi geçici bir görünüme kopyalar. |
{ begin, end } |
Yes | No |
begin ve endileri yineleyiciler olmalı ve *beginT'ye dönüştürülebilir olmalıdır. |
Yine çift yineleyici sürümü, mevcut bir alternatife uymayan öğelerin dışında vektör görünümleri oluşturmak için kullanılabilir.
Geçici görünüm, begin ve end yineleyicileri rastgele erişimli yineleyicilerse daha verimlidir.
Harita görünümü parametreleri için alternatifler
winrt::param::map_view<T> ve winrt::param::async_map_view<T>, parametrelerin IMapView<T> olarak geçirilmesini basitleştirir.
Bir IMap<K, V> nesnesinden IMapView<K, V> elde etmek için IMap<K, V>::GetView yöntemini çağırabilirsiniz.
IMapView<K, V'ye> ek olarak aşağıdaki alternatifler de kabul edilir. Bazı alternatiflerin yalnızca zaman uyumlu yöntemler için kullanılabildiğini unutmayın.
| Alternatif | Sync | Async | Notes |
|---|---|---|---|
| std::map<K, V> const& | Yes | No | |
| std::map<K, V>&& | Yes | Yes | İçerikler geçici bir görünüme taşınır. |
| std::unordered_map<K, V> const& | Yes | No | |
| std::unordered_map<K, V>&& | Yes | Yes | İçerikler geçici bir görünüme taşınır. |
| std::initializer_list<std::pair<K, V>> | Yes | Yes | İçerikler geçici bir görünüme kopyalanır. Anahtarlar çoğaltılamayabilir. |
Vektör parametreleri için alternatifler
winrt::param::vector<T>, parametrelerin IVector<T> olarak geçirilmesini basitleştirir. IVector<T'ye> ek olarak, bu alternatifler de kabul edilir:
| Alternatif | Notes |
|---|---|
| std::vector<T>& | İçerikler geçici bir vektöre taşınır. Sonuçlar geri taşınmaz. |
| std::initializer_list<T> |
Yöntem geçici vektörü değiştirirse, bu değişiklikler orijinal parametrelere yansımaz. Değişiklikleri gözlemlemek için bir IVector<T> iletin.
Harita parametreleri için alternatifler
winrt::param::map<K, V>, parametrelerin IMap<K, V> olarak geçirilmesini basitleştirir. IMap<K, V'ye> ek olarak, bu alternatifler de kabul edilir:
| Geçebilirsiniz | Notes |
|---|---|
| std::map<K, V>&& | İçerikler geçici bir haritaya taşınır. Sonuçlar geri taşınmaz. |
| std::unordered_map<K, V>&& | İçerikler geçici bir haritaya taşınır. Sonuçlar geri taşınmaz. |
| std::initializer_list<std::pair<K, V>> |
Yöntem geçici eşleme yapısını değiştirirse, bu değişiklikler orijinal parametrelere yansımaz. Değişiklikleri gözlemlemek için bir IMap<K, V geçirin>.
Dizi parametreleri için alternatifler
winrt::array_view<T>, winrt::param ad alanında yer almaz, ancak C stili diziler için parametre olarak kullanılır. Açık array_view<T'ye> ek olarak, bu alternatifler de kabul edilir:
| Alternatif | Notes |
|---|---|
{} |
Boş dizi. |
| U[] |
U'nun T'ye dönüştürülebildiği ve sizeof(U) == sizeof(T) olan C stili bir dizi. |
| std::array<U, N> | Burada U , T'ye dönüştürülebilir ve sizeof(U) == sizeof(T). |
| std::vector<U> | Burada U , T'ye dönüştürülebilir ve sizeof(U) == sizeof(T). |
{ begin, end } |
beginve end [, begin) aralığını temsil eden end türünde olmalıdır. |
| std::initializer_list<T> | |
| std::span<U, N> | Burada U , T'ye dönüştürülebilir ve sizeof(U) == sizeof(T). |
Ayrıca Windows Çalışma Zamanı ABI sınırını aşarken C tarzı dizileri aktarmaya yönelik farklı kalıpları ele alan blog gönderisine de göz atın.
Windows developer