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

  • boniver

    boniver

    17 NİSAN 2006
  • buttheadgsxr1000

    buttheadgsxr

    24 Ocak 2008
  • EmbarkToHeaven

    EmbarkToHeav

    3 EYLÜL 2007