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

  • Bogdan Gabriel

    Bogdan Gabri

    5 Aralık 2006
  • Perihelion

    Perihelion

    23 NİSAN 2008
  • SamsTech

    SamsTech

    4 NİSAN 2014