Fly Mesaj tarihi: Ekim 12, 2012 Paylaş Mesaj tarihi: Ekim 12, 2012 metaprogramming revize ederken aklima geldi, sirayla aklimdakileri de yaziyorum yanlisim varsa uyarin : fibonacciyi ele alirsak return fib()+return fib() dersek fonksiyonlar neticede fonksiyon cagrisi yapiyor eninde sonunda, performans bakimindan pek de bir esprisi olmuyor template kullanmanin o yuzden compiler hesaplasin diye template islemine tabi tutulan structlar icine sarilmis bir sekilde sabit degerler veriyoruz tam anlayamadigim sey gordugum orneklerde enum'un "yer kaplamiyor" diye gecmesi static const tatava dedigimizde tamam, N tane tatava tipi sey olusuyor her sayi icin diger avantaji da memory access ile erisebildigimiz bisey olmuyor enum dedigimizde sonucta, ona da ok ama "yer kaplamiyor" nasil bir sey onu anlamadim. en azindan fib<1234>::val su degere esittir diye binarynin icinde yer edinmiyor mu kendisine ? variable'a erismekten daha hizli olabilir de bunu anlamadim, buldugum cogu ornek de ayni telden cevap vermis ya da kafam basmadi su anda, net aciklamasi olan ? Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Eralpb Mesaj tarihi: Ekim 12, 2012 Paylaş Mesaj tarihi: Ekim 12, 2012 Sen dedikten sonra biraz okudum da yaptigi sey diyelim Factorial<4> var kodunda bunu 24 ile replace etmek degil mi? Yani yer kaplamiyor dedikleri exe'deyse ve ben dogru anladiysam bence de oyle. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Artariel Mesaj tarihi: Ekim 12, 2012 Paylaş Mesaj tarihi: Ekim 12, 2012 #define gibi düşün işte, compile zamanında replace ediyor, yer kaplamaması da o işte Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Fly Mesaj tarihi: Ekim 12, 2012 Konuyu açan Paylaş Mesaj tarihi: Ekim 12, 2012 tam degil, hayir Factorial<4> struct taniminin icinde 24 ile baslayan ve struct scope'una ait bir enum tanimlaniyor instance almiyoruz evet, class tanimlayip kullanmadigimizda standart int mint olsa yer kaplamamali (sanirim) ama 24'ten basla dedigimiz bir enum tanimi oluyor sonucta o 24'u bir yere sokuyor olmaliyiz bilmek istedigim "bu specializationda constant bir class member var, degeri 24" ile arasindaki fark direk define degilse de literal olarak oraya giriyor yani neticede varmaya calistigim nokta kullanici sayi girdiginde compiletime'da olusturdugu tablo/vektor/etcye erismek hesaplanmis enum degerlerini rekursif olarak atarak runtime'da doldurani var da onu istemiyorum Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Eralpb Mesaj tarihi: Ekim 12, 2012 Paylaş Mesaj tarihi: Ekim 12, 2012 Evet farkli kaynaklardan baktim benim anladigim gibi degilmis fakat soyle kullanim alanlari olabilir: Diyelim karmasik bir fonksiyonun var fakat icindeki bir parametreden emin degilsin. 3le mi carpman gerektigi 2yle mi carpman gerektigi gibi. Ve kodunda da bu fonksiyonu 100 kere cagiriyorsun. Eger template metaprogramming ile yaparsan tek bir karakter degistirip programin performansini gorebilirsin diger turlu o enum'u bastan yazmak zorundasin, veya 100+ entry oldugunu dusunursek elle yazmak zor olacagindan bu enumu output olarak veren 2. bir c programi yazmak zorunda kalabilirsin. edit: sanirim farki sadece yer kaplama acisindan sormussun ben baska biseye cevap vermisim, neyse uplanmis oldu haha Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Fly Mesaj tarihi: Ekim 12, 2012 Konuyu açan Paylaş Mesaj tarihi: Ekim 12, 2012 compiletime'da hesaplanani runtime'da dinamik olarak erisilebilecek bir yere atmasi dert sebebi de spesiyalize seyi kullanici inputuna falan gore cagiramiyorsun dogal olarak, compiler ne uretecegini onceden bilmek istiyor tabloyu runtime'da olusturmak cok zor degil, pseudocode tadinda soyle az bucuk, derlemedim de dogrudur muhtemelen : template<long long K> void fact::populateVector(std::vector<long long int> &vals) { vals.push_front(fact<K>::value) fact::populateVector(vals); } template<> void fact<0>::populateVector(std::vector<long long int> &vals) { vals.push_front(0); } template<> void fact<1>::populateVector(std::vector<long long int> &vals) { vals.push_front(1); fact<0>::populateVector(vals); } main'de dolduracagin limite gore popule ediyorsun falan fesmekan value'lar onceden hesaplanmis oldugu icin o degeri pushlayip diger metodu cagirmak disinda masrafi yok ama ben o masraftan da kacinilabilir mi onu merak ediyorum cunku cogu ornek user inputu sallamadan programcinin bildigi durumlara has, memoization gibi seyleri compile sirasinda kendi halletsin ne kullanici beklesin ne de ben elle tek tek gireyim istedigim sey bu Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Öne çıkan mesajlar