C++ template frenzy
15 отговора
612 прегледа
C++ template frenzy
zdraveite,
popadna mi interesna ideia za izvrashtenia s templati, naprimer:
prostotiata tuk idva ot fakta, che faktoriela se smiata po vreme na kompilacia...
t.e. vremeto za izpylnenie na programata e konstanta. (njama da spomenavam vremeto za kompilacia i goleminata na generirania kod
). syshto taka pri golemi N kompilatorite se oplakvat.
ta na vyprosa -- ne me kefi, che vadia rezultata s cout. chel sym njakyde, che e vyzmozhno da se izvede custom warning, no neshto ne namerih takava direktiva iz msdn (za g++ ne sym tyrsil). njama da se obidia i ako e drug tip warning -- da rechem nesyotvetstvie v tipove.
iskam da izvadia rezultata s neshto takova -- ia kato error ia kato warning. kefi me ideiata za programa, koiato vyrshi neshto bez da se izpylniava izobshto
лирически изпълнявам въоръжени грабежи
popadna mi interesna ideia za izvrashtenia s templati, naprimer:
#include <iostream>
template<int N>
class Factorial
{
public:
enum { value = N * Factorial<N-1>::value };
};
template<>
class Factorial<1>
{
public:
enum { value = 1 };
};
int main()
{
std::cout << Factorial<15>::value;
}
prostotiata tuk idva ot fakta, che faktoriela se smiata po vreme na kompilacia...
t.e. vremeto za izpylnenie na programata e konstanta. (njama da spomenavam vremeto za kompilacia i goleminata na generirania kod
ta na vyprosa -- ne me kefi, che vadia rezultata s cout. chel sym njakyde, che e vyzmozhno da se izvede custom warning, no neshto ne namerih takava direktiva iz msdn (za g++ ne sym tyrsil). njama da se obidia i ako e drug tip warning -- da rechem nesyotvetstvie v tipove.
iskam da izvadia rezultata s neshto takova -- ia kato error ia kato warning. kefi me ideiata za programa, koiato vyrshi neshto bez da se izpylniava izobshto
лирически изпълнявам въоръжени грабежи
Re: C++ template frenzy
Eto tova e problema na C++ - kato extasy drug e sometimes :) Otklonjawa horata nenuzhno. Djavola e zamesen. Sledwajte pravia put - C! hehehehe... ne me slushaite
hmm... kakto i da e
tirulirutatuutuu
hmm... kakto i da e
tirulirutatuutuu
Re: C++ template frenzy
Виж Modern C++ Design на Andrei Alexandrescu и по-конкретно библиотеката му Loki.
Re: C++ template frenzy
modern c++ design я търся под дърво и камък ама не мога да я намеря
всъщност идеята (не е съвсем моя де :)) дойде докато зяпах примерните глави от книгата онлайн и докато четях подобни глупости (template metaprogramming, et al)
имаш ли въпросната книжка? има ли как да се докопам до нея
колкото до Loki -- ще погледна, поне кода е фрий даунлоуд
лирически изпълнявам въоръжени грабежи
всъщност идеята (не е съвсем моя де :)) дойде докато зяпах примерните глави от книгата онлайн и докато четях подобни глупости (template metaprogramming, et al)
имаш ли въпросната книжка? има ли как да се докопам до нея
колкото до Loki -- ще погледна, поне кода е фрий даунлоуд
лирически изпълнявам въоръжени грабежи
Re: C++ template frenzy
Дабре, ама какъв е смисъла от програма която нищо не прави, или го прави по време на компилация?!. Ти резултата тогава може да си го сметнеш с колкулатора и да си го сложиш където ти трябва по кода 
Re: C++ template frenzy
e tochno ot presmiatane na factorial naistina niama ogromen smisyl - w knigata ima metaprogramming koito se polzwa za po-razumni neshta :)
Значи от скоро четеш тоя клуб
Това същото го бях постнал преди няколко месеца, но не го харесаха защото било безполезно. Междувременно се сетих нещо наистина полезно:
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
template <unsigned N>
class Pow
{
public:
template <class NUMBER>
NUMBER operator() ( const NUMBER &X )
{
if( N % 2 )
{ // odd
return X*Pow<N-1>()(X);
}else
{ // even
return Pow<N/2>()(X)*Pow<N/2>()(X);
}
}
};
template<>
class Pow<0>
{
public:
template <class NUMBER>
NUMBER operator() ( const NUMBER& ) { return NUMBER(1); }
};
int main(int argc, char*[])
{
double X;
std::cin >> X;
X = Pow<10>()( X );
std::cout << X << std::endl;
std::cout << Pow<10>()(2) << std::endl;
return 0;
}
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Re: C++ template frenzy
между другото да вмъкна и аз нещо - някой има ли представа дали може да се намери като e - book "Effective STL" на Scott Meyers ???
най-често умните хора са и лоши
най-често умните хора са и лоши
Re: Значи от скоро четеш тоя клуб
lichno az sum ubeden che podobni neshta ne sa polezni.
Nito sus sigurnost se znae daden kompilator do kakwo razgurashtane mozhe da stigne, nito kakva skorost shte otneme za kompilatzia - i ako neshto se "smjata" wuw header fail - to trjabwa za wseki fail kojto se kompilira i izpolzwa tozi header fail da se smetne. Shte popitate - mi zashto wuw header fail?? Samo wuw sourse fail go izpolzwaj!! Ami tova mi zvuchi na "Ne izpolzwaj mrusni dumi pred maika si"... ezika e dal wuzmozhnost za postrojawane na razni stranni konstrukcii i izchislenia - obache poslednite nito sus golemi stoinosti (razgrushtania, expandwania) mogat da rabotjat (da kazhem 500-600 niva navutre), nito se znae kolko pamet shte wzemat po wreme na kompilatzia - i kolko wreme... Emi po-dobre da ne se polzwat takiva raboti....
Tochno za smjatane ne staffa
tirulirutatuutuu
Nito sus sigurnost se znae daden kompilator do kakwo razgurashtane mozhe da stigne, nito kakva skorost shte otneme za kompilatzia - i ako neshto se "smjata" wuw header fail - to trjabwa za wseki fail kojto se kompilira i izpolzwa tozi header fail da se smetne. Shte popitate - mi zashto wuw header fail?? Samo wuw sourse fail go izpolzwaj!! Ami tova mi zvuchi na "Ne izpolzwaj mrusni dumi pred maika si"... ezika e dal wuzmozhnost za postrojawane na razni stranni konstrukcii i izchislenia - obache poslednite nito sus golemi stoinosti (razgrushtania, expandwania) mogat da rabotjat (da kazhem 500-600 niva navutre), nito se znae kolko pamet shte wzemat po wreme na kompilatzia - i kolko wreme... Emi po-dobre da ne se polzwat takiva raboti....
Tochno za smjatane ne staffa
tirulirutatuutuu
Re: C++ template frenzy
Е то е ясно че metaprogramming-а не са го сложили замо щото някакви извратени типове са нямали кво да правя и кво кво ... я да набутаме един метапрограминг в спецификацията за С++ 
Re: C++ template frenzy
Ако си в чужбина, предполагам можеш да си я купиш :-) Иначе $40+shipping са си доста. Аз я взех от служебната библиотека.
Малък, тези концепции ти дават нова перспектива и са ценни дори да нямат реално приложение в твоята област.
Малък, тези концепции ти дават нова перспектива и са ценни дори да нямат реално приложение в твоята област.
Re: C++ template frenzy
mozhe bi...
ot druga stana - mi zwuchat kato porednata nova igrachka kojato sa kupili na deteto i trjabwa da si igrae... Ne tochno taka.. no gore dolu...
tirulirutatuutuu
ot druga stana - mi zwuchat kato porednata nova igrachka kojato sa kupili na deteto i trjabwa da si igrae... Ne tochno taka.. no gore dolu...
tirulirutatuutuu
Re: Значи от скоро четеш тоя клуб
Mалък, не си прав. Невежеството е щит, както казват из нашия край.
Partial Evaluation е много мощен метод, да се създават обектни библиотеки за числени методи и т.н, които са много ефективни. Сравними с Фортран. С това се избягва създаването на много временни обекти и накратко, компилатора действа като един много мощен препроцесор.
Ако ви се чете [линк]. Това е човека, които ги е измислил нещата.
Partial Evaluation е много мощен метод, да се създават обектни библиотеки за числени методи и т.н, които са много ефективни. Сравними с Фортран. С това се избягва създаването на много временни обекти и накратко, компилатора действа като един много мощен препроцесор.
Ако ви се чете [линк]. Това е човека, които ги е измислил нещата.
Re: Значи от скоро четеш тоя клуб
Wuobshte ne smjatam che KOMPILATORA trjabwa da wzema cenno vreme! - chestno!
pisnalo mi e ot build otnemasht 19 minuti za tova che nekoi si front-end pisach kreten e wkaral wuw header faila 2 tona kod - kojto spokojno mozheshe da otide kato .cpp ili .c - obache tendentziata wsichko da se templatizira - naistina spira toka ponjakoga... da ne govorim za 738mb SBR failove koito MSVC-to (za xbox) generira, i 128MB obj failove - uzhas! i link-time-a - kum 2 minuti.... (zashtoto tezi simwoli trjabwa da se opiswat wutre)
Taka che naistina postigash neshto - ama wsushnost gubish mnogo drugi neshta - skorost, proizwoditelnost, pamet, podredba, razmer.
Ako ti trjabwa tolkova preprocess na smetka - napravi si wuw makefile-a ili projeckta - neshto koeto ti smjata - na .C i ti generira header fail sus stoinostite - kakuv e problema - po-prosto ot tova nema!
e kakto i da e -
Osven tova - sega trjabwa da se uchat edin biljuk neshta - BLITZ, STL, BOOST, i kakvi li oshte drugi raboti - wmesto da se sedne i da se pishe kod! Pametta kojato e imame e tzenna - ne trjabwa da ja pulnim s gluposti - chestno!
W krajna smetka - nekvi shibani programi pishem - a ne teoria na otnositelnostta...
tirulirutatuutuu
pisnalo mi e ot build otnemasht 19 minuti za tova che nekoi si front-end pisach kreten e wkaral wuw header faila 2 tona kod - kojto spokojno mozheshe da otide kato .cpp ili .c - obache tendentziata wsichko da se templatizira - naistina spira toka ponjakoga... da ne govorim za 738mb SBR failove koito MSVC-to (za xbox) generira, i 128MB obj failove - uzhas! i link-time-a - kum 2 minuti.... (zashtoto tezi simwoli trjabwa da se opiswat wutre)
Taka che naistina postigash neshto - ama wsushnost gubish mnogo drugi neshta - skorost, proizwoditelnost, pamet, podredba, razmer.
Ako ti trjabwa tolkova preprocess na smetka - napravi si wuw makefile-a ili projeckta - neshto koeto ti smjata - na .C i ti generira header fail sus stoinostite - kakuv e problema - po-prosto ot tova nema!
e kakto i da e -
Osven tova - sega trjabwa da se uchat edin biljuk neshta - BLITZ, STL, BOOST, i kakvi li oshte drugi raboti - wmesto da se sedne i da se pishe kod! Pametta kojato e imame e tzenna - ne trjabwa da ja pulnim s gluposti - chestno!
W krajna smetka - nekvi shibani programi pishem - a ne teoria na otnositelnostta...
tirulirutatuutuu
Re: C++ template frenzy
ideino e tva stiga da razbirash kak da go izpolzvash,
ne e mnogo polezno da presmiatane i to osobenno v compile time, po skoro ideata e da se napravi dispatch na functions v compile time, no oshte po tynkata misyl e izpolzvaneto na runtime dispatch polymorphism,
obiknovenno v runtime polymorphism stava s pomoshta na if-else ili v naj-dobria slu4aj switch, ta izpolzvaneto na takviz mapping templates po podhodiashtia na4in predotvratiava pisaneto na switch spageti (pone)
ne e mnogo polezno da presmiatane i to osobenno v compile time, po skoro ideata e da se napravi dispatch na functions v compile time, no oshte po tynkata misyl e izpolzvaneto na runtime dispatch polymorphism,
obiknovenno v runtime polymorphism stava s pomoshta na if-else ili v naj-dobria slu4aj switch, ta izpolzvaneto na takviz mapping templates po podhodiashtia na4in predotvratiava pisaneto na switch spageti (pone)
Re: Значи от скоро четеш тоя клуб
Хубав спор стана.
Аз нашия проект като му сложих precomplied headers, скоростта хвръкна, 2,3 пъти намаля времето.
SBR - от тях няма полза. visual assist e 100 пъти по добро и не забавя компилацията.
Целта на STL, Boost е не да пишеш повече код, повече коректни програми. Това са тествани неща, може да ги използваш без проблем (STL поне).
Аз нашия проект като му сложих precomplied headers, скоростта хвръкна, 2,3 пъти намаля времето.
SBR - от тях няма полза. visual assist e 100 пъти по добро и не забавя компилацията.
Целта на STL, Boost е не да пишеш повече код, повече коректни програми. Това са тествани неща, може да ги използваш без проблем (STL поне).