SORU
14 ŞUBAT 2011, PAZARTESİ


Nasıl boost::varyant ve boost::herhangi bir iş mi?

Ne kadar değişken ve herhangi bir kütüphane dahili artırmak mı? Üzerinde çalıştığım bir projede, şu anda etiketli Birliği kullanın. C sendikalar mı yapıcılar, yıkıcılar ya da aşırı yüklenmiş atama operatörleri ile nesneleri kullanmasına izin vermeyin, çünkü başka bir şey kullanmak istiyorum.

Herhangi bir varyantı ve boyutunu sordum, ve onlarla deneyler yaptı. Olası en uzun türü plus 8 bayt boyutunu alır varyantını platform: benim sadece 8 bayt tür bilgileri o ve diğerleri saklı değer. bence Diğer taraftan, herhangi bir 8 bayt alır. 64-bit platform üzerinde olduğum için, herhangi bir gösterici tutar sanırım.

Nasıl tutar biliyor mu? Nasıl Değişken şablonları ile ne yapılabilir? Onları kullanmadan önce bu sınıflar hakkında daha fazla bilmek istiyorum.

CEVAP
14 ŞUBAT 2011, PAZARTESİ


Eğer destek okursanız::fikir için kaynak sağlamak herhangi bir belge: http://www.two-sdg.demon.co.uk/curbralan/papers/ValuedConversions.pdf

Temel bilgi gizleme için gerekli C bir yetenektir. Bunu Öğren!

Bu yana en yüksek oy cevap burada tamamen yanlış, ve ben benim şüphelerim bu insanlar aslında git bak kaynağını doğrulamak için aslında, burada temel bir uygulama gibi herhangi bir arayüz olacak wrap herhangi bir türü ile bir f() fonksiyonu ve izin için:

struct f_any
{
   f_any() : ptr() {}
   ~f_any() { delete ptr; }
   bool valid() const { return ptr != 0; }
   void f() { assert(ptr); ptr->f(); }

   struct placeholder
   {
     virtual ~placeholder() {}
     virtual void f() const = 0;
   };

   template < typename T >
   struct impl : placeholder
   {
     impl(T const& t) : val(t) {}
     void f() const { val.f(); }
     T val;
    };
   // ptr can now point to the entire family of 
   // struct types generated from impl<T>
   placeholder * ptr;

   template < typename T >
   f_any(T const& t) : ptr(new impl(t)) {}

  // assignment, etc...
};

::destek herhangi bir f dışında aynı temel şeyi yapar() aslında 2 verir ** ve işe any_cast işlevi için diğer bilgi erişim sağlar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Fullscreen

    Fullscreen

    23 Mart 2006
  • MisterBrightside

    MisterBright

    24 Mart 2006
  • Rootjunky.com

    Rootjunky.co

    22 EKİM 2011