Aracılığıyla paylaş


atl kopya ilke sınıfları

Kopya ilke sınıflardır yardımcı program sınıfları başlatmak için kullanılan, kopyalama ve verileri silme.Kopya ilke sınıfları, herhangi bir veri türü için kopyalama semantiğini tanımlar ve farklı veri türleri arasında dönüştürme tanımlamak için olanak sağlar.

Aşağıdaki şablonlar kendi uygulamalarında atl kullandığı kopya ilke sınıfları:

Kopyalamak veya şablon bağımsız değişken olarak geçirilen bir kopya İlkesi sınıf verileri dönüştürmek için gereken bilgileri Kapsüllenen tarafından atl geliştiriciler için bu sınıfların extreme çalışmalarında sağlamış.Örneğin, herhangi bir rasgele veri türünü kullanarak bir koleksiyon sağlamanız gerekiyorsa, tüm sağlamanız gereken, uygun kopya İlkesi; hiçbir zaman koleksiyonunu gerçekleştirir koduna sahip.

Tanım

Tanım olarak, statik aşağıdaki işlevleri sağlayan bir sınıf bir kopya ilke sınıfıdır:

static void init(DestinationType* p);

static HRESULT copy(DestinationType* pTo, const SourceType* pFrom);

static void destroy(DestinationType* p);

Türlerini değiştirebilir DestinationType ve kaynak türü her kopya ilkesi için rasgele veri türlerine sahip.

[!NOT]

Herhangi bir rasgele veri türleri için kopya ilke sınıfları tanımlayabilirsiniz, ancak atl kodunu sınıflarda kullanımını anlamlı türleri sınırlamanız gerekir.Örneğin, ne zaman bir kopya İlkesi'ni kullanarak sınıf ATL'ın koleksiyonu veya numaralayıcı uygulamaları ile DestinationType com arabirim yöntemi parametre olarak kullanılan bir tür olmalıdır.

Kullanım init , veriyi baþlatmak için kopya veri kopyalamak ve bozmak verilere yer açmak için.Başlatma tam anlamı, kopyalama ve imha kopya ilke sınıfının etki alanı ve söz konusu veri türlerine bağlı olarak değişir.

Kullanımına ve kopya ilke sınıfı uygulaması iki gereksinim vardır:

  • İlk parametre copy kullanarak daha önce başlatılmış veri işaretçisi yalnızca alması init.

  • bozmak kullanarak daha önce başlatılmış veri işaretçisi yalnızca şimdiye kadar alması init ya da kopyalanan aracılığıyla kopya.

Standart uygulamaları

atl sağlar şeklinde iki kopya ilke sınıfı _Copy ve _CopyInterface şablon sınıfları:

  • _Copy sınıfı yalnızca kopyalama homojen verir (not veri türleri arasında dönüştürme) her ikisini belirtmek için tek bir şablon parametresini yalnızca sunan bu yana DestinationType ve kaynak türü.Bu şablonun genel uygulama başlatma ya da imha kodunu içerir ve kullanan memcpy verileri kopyalamak için.atl de sağlar, specializations _Copy için VARIANT, LPOLESTR, oleverb, ve connectdata veri türleri.

  • _CopyInterface sınıfı, standart com kurallara arabirim işaretçilerine kopyalama uygulaması sağlar.Basit atama ve çağrı kullanması için bir kez daha Bu sınıf yalnızca homojen kopyalama, verir AddRef Kopyalamayı gerçekleştirmek için.

Özel uygulamalar

Genellikle, türdeş olmayan (veri türleri arasında dönüşüm) kopyalamak için kendi kopyasını ilke sınıfları tanýmlamanýz gerekir.VCUE_Copy.h ve VCUE_CopyString.h içindeki dosyaları özel kopya ilke sınıfları bazı örnekleri bakmak ATLCollections örnek.İki şablon kopya ilke sınıfları, bu dosyaları içeren GenericCopy ve MapCopy, specializations'ın sayısı artı GenericCopy farklı veri türleri için.

td6kz9x0.collapse_all(tr-tr,VS.110).gifGenericCopy

GenericCopybelirtmenize olanak veren kaynak türü ve DestinationType şablon bağımsız olarak.En genel şeklinde İşte GenericCopy VCUE_Copy.h sınıfından:

template <class DestinationType, class SourceType = DestinationType>
class GenericCopy
{
public :
   typedef DestinationType  destination_type;
   typedef SourceType       source_type;

   static void init(destination_type* p)
   {
      _Copy<destination_type>::init(p);
   }
   static void destroy(destination_type* p)
   {
      _Copy<destination_type>::destroy(p);
   }
   static HRESULT copy(destination_type* pTo, const source_type* pFrom)
   {
      return _Copy<destination_type>::copy(pTo, const_cast<source_type*>(pFrom));
   }

}; // class GenericCopy

VCUE_Copy.h de içeren bu sınıfın aşağıdaki specializations: GenericCopy<BSTR>, GenericCopy<VARIANT, BSTR>, GenericCopy<BSTR, VARIANT>.VCUE_CopyString.h içeren kopyalama için specializations std::strings: GenericCopy<std::string>, GenericCopy<VARIANT, std::string>, ve GenericCopy<BSTR, std::string>.Geliştirmek GenericCopy daha kendi specializations sağlayarak.

td6kz9x0.collapse_all(tr-tr,VS.110).gifMapCopy

MapCopyveriler depolanır ve hedef yazın eşleme türünü belirlemenize izin verir şekilde kopyalanan verileri bir stil stl eşlemesi depolanacak varsayar.Sınıf uygulaması tarafından sağlanan TypeDef yalnızca kullanan MapType kaynak veri türünü belirlemek ve uygun çağrısı için sınıf GenericCopy sınıfı.Bu sınıfın hiçbir specializations gereklidir.

template <class MapType, class DestinationType = MapType::referent_type>
class MapCopy
{
public :
   typedef DestinationType          destination_type;
   typedef typename MapType::value_type     source_type;

   typedef MapType                  map_type;
   typedef typename MapType::referent_type  pseudosource_type;

   static void init(destination_type* p)
   {
      GenericCopy<destination_type, pseudosource_type>::init(p);
   }
   static void destroy(destination_type* p)
   {
      GenericCopy<destination_type, pseudosource_type>::destroy(p);
   }
   static HRESULT copy(destination_type* pTo, const source_type* pFrom)
   {
      return GenericCopy<destination_type, pseudosource_type>::copy(pTo, &(pFrom->second));
   }

}; // class MapCopy

Ayrıca bkz.

Kavramlar

stl tabanlı bir koleksiyon uygulama

ATLCollections örnek