SORU
6 Ocak 2012, Cuma


Nasıl C#, C veya 1 2 3 ... 1000 hesaplamak için Java derleyici sürücü için?

Yakın tarihli bir röportajda, gerçekten garip bir soru sordu. Mülakatı yapan kişi bana nasıl 1 2 3 ... 1000 hesaplayabilir ben derleyici özellikleri kullanmak istedi. Bu demektir ki ben değilim izin için yazdığım bir program ve çalıştırmak, ama ben yazma programı kullanabilirim derleyici için hesaplama bu miktar ise derleme ve baskı sonucu ne zaman derleme tamamlar. Bir ipucu olarak, jenerik ve derleyici işlemci ön özellikleri kullanabilirim söyledi. C , C kullanmak mümkündür# ya da Java derleyicisi. Herhangi bir fikir???

Bu soru herhangi bir döngü olmadan toplamı asked here bilgisayar ile ilgili değil. Buna ek olarak, toplam derleme sırasında hesaplanmış olması GEREKTİĞİNİ belirtmek gerekir. Sadece sonucu C derleyici yönergeleri kullanarak baskı kabul edilebilir değil.

Düzenleme:

Daha gönderildi cevapları hakkında okuma, derleme C şablonlar kullanılarak sırasında sorunları çözme denirmetaprogramming. Bu yanlışlıkla Dr. Erwin Unruh tarafından keşfedilmiş bir tekniktir, C dilinin standart hale getirilmesi sürecinde. Daha fazla wiki page of meta-programmingbu konu hakkında okuyabilirsiniz. Java ek açıklamaları kullanarak program yazmak mümkün gibi görünüyor. Bir göz sürebilirmaress'saşağıda cevap.

Edit 2:

C meta-programlama hakkında çok güzel bir kitap this one. Değer ilgilenen varsa bir göz atın.

3 düzenlemek

Meta-programlama kullanışlı bir C kütüphanesi 10 ** Boost MPL.

CEVAP
6 Ocak 2012, Cuma


GüncellendiŞimdi gelişmiş özyineleme derinliği! Artan derinliği olmayan MSVC10 ve GCC çalışır. :)


Basit-derleme ayrıca özyineleme:

template<unsigned Cur, unsigned Goal>
struct adder{
  static unsigned const sub_goal = (Cur   Goal) / 2;
  static unsigned const tmp = adder<Cur, sub_goal>::value;
  static unsigned const value = tmp   adder<sub_goal 1, Goal>::value;
};

template<unsigned Goal>
struct adder<Goal, Goal>{
  static unsigned const value = Goal;
};

Testcode:

template<unsigned Start>
struct sum_from{
  template<unsigned Goal>
  struct to{
    template<unsigned N>
    struct equals;

    typedef equals<adder<Start, Goal>::value> result;
  };
};

int main(){
  sum_from<1>::to<1000>::result();
}

GCC çıktı:

hata: ‘yapı sum_from<1u>ilanı ::&; 1000u>lt ::&; 500500u^ eşittir . lt ’

Live example on Ideone.

MSVC10 çıktı:

error C2514: 'sum_from<Start>::to<Goal>::equals<Result>' : class has no constructors
      with
      [
          Start=1,
          Goal=1000,
          Result=500500
      ]

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Derek Banas

    Derek Banas

    12 AĞUSTOS 2008
  • Google Developers

    Google Devel

    23 AĞUSTOS 2007
  • Unbox Therapy

    Unbox Therap

    21 Aralık 2010