SORU
31 Ocak 2010, Pazar


Template Metaprogramming - Numaralama Hack Kullanarak Statik ve Sabit Arasındaki Fark

Fark statik bir sabit kullanma arasında ne olduğunu merak ediyorum ve bir numaralama şablonu metaprogramming teknikleri kullanarak kesmek.

ÖRN: (Fibonacci TMP))

template< int n > struct TMPFib {
  static const int val =
    TMPFib< n-1 >::val   TMPFib< n-2 >::val;
};

template<> struct TMPFib< 1 > {
  static const int val = 1;
};

template<> struct TMPFib< 0 > {
  static const int val = 0;
};

vs

template< int n > struct TMPFib {
  enum {
    val = TMPFib< n-1 >::val   TMPFib< n-2 >::val
  };
};

template<> struct TMPFib< 1 > {
  enum { val = 1 };
};

template<> struct TMPFib< 0 > {
  enum { val = 0 };
};

Neden diğer üzerinden bir kullan? Hack statik inş daha önce kullanılmış numaralama sınıflar içinde desteklenen olduğunu okudum, ama neden şimdi?

CEVAP
31 Ocak 2010, Pazar


Çeteleler üye değerlerdir lvals, statik değil ve eğer başvuru kabul edilirse şablonu instanciated olacak:

void f(const int&);
f(TMPFib<1>::value);

Eğer yapmak istiyorsan saf vb saat hesaplamaları derleme. bu yan etki bir istenmeyen.

Ana tarihi fark çeteleler de sınıf-başlatma üyesi değerlerini desteklenmiyor, bu düzeltilmesi gereken en derleyici Derleyiciler için çalışıyor artık.
Ayrıca numaralama ve statik consts arasında derleme hız farklılıkları olabilir.

boost coding guidelines bazı ayrıntılar ve konu ile ilgili older thread boost bir arşiv var.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 07cadikiz07

    07cadikiz07

    17 EKİM 2007
  • 1881 Animation

    1881 Animati

    5 EKİM 2013
  • BroadCity

    BroadCity

    10 ŞUBAT 2010