C++ template frenzy

15 отговора 612 прегледа
#1

C++ template frenzy

zdraveite,

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 ). 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

лирически изпълнявам въоръжени грабежи
Отговор
в отговор на Meндeлeeв #2

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
Отговор
в отговор на Meндeлeeв #3

Re: C++ template frenzy

Виж Modern C++ Design на Andrei Alexandrescu и по-конкретно библиотеката му Loki.

Отговор
в отговор на Bonev #4

Re: C++ template frenzy

modern c++ design я търся под дърво и камък ама не мога да я намеря

всъщност идеята (не е съвсем моя де :)) дойде докато зяпах примерните глави от книгата онлайн и докато четях подобни глупости (template metaprogramming, et al)

имаш ли въпросната книжка? има ли как да се докопам до нея

колкото до Loki -- ще погледна, поне кода е фрий даунлоуд

лирически изпълнявам въоръжени грабежи
Отговор
в отговор на Meндeлeeв #5

Re: C++ template frenzy

Дабре, ама какъв е смисъла от програма която нищо не прави, или го прави по време на компилация?!. Ти резултата тогава може да си го сметнеш с колкулатора и да си го сложиш където ти трябва по кода

Отговор
в отговор на Mopт #6

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 :)

Отговор
в отговор на Meндeлeeв #7

Значи от скоро четеш тоя клуб

Това същото го бях постнал преди няколко месеца, но не го харесаха защото било безполезно. Междувременно се сетих нещо наистина полезно:

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?_
Отговор
в отговор на Meндeлeeв #8

Re: C++ template frenzy

между другото да вмъкна и аз нещо - някой има ли представа дали може да се намери като e - book "Effective STL" на Scott Meyers ???

най-често умните хора са и лоши
Отговор
в отговор на Colombino #9

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
Отговор
в отговор на gruhal #10

Re: C++ template frenzy

Е то е ясно че metaprogramming-а не са го сложили замо щото някакви извратени типове са нямали кво да правя и кво кво ... я да набутаме един метапрограминг в спецификацията за С++

Отговор
в отговор на Meндeлeeв #11

Re: C++ template frenzy

Ако си в чужбина, предполагам можеш да си я купиш :-) Иначе $40+shipping са си доста. Аз я взех от служебната библиотека.

Малък, тези концепции ти дават нова перспектива и са ценни дори да нямат реално приложение в твоята област.

Отговор
в отговор на Bonev #12

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
Отговор
в отговор на malkia #13

Re: Значи от скоро четеш тоя клуб

Mалък, не си прав. Невежеството е щит, както казват из нашия край.

Partial Evaluation е много мощен метод, да се създават обектни библиотеки за числени методи и т.н, които са много ефективни. Сравними с Фортран. С това се избягва създаването на много временни обекти и накратко, компилатора действа като един много мощен препроцесор.

Ако ви се чете [линк]. Това е човека, които ги е измислил нещата.

Отговор
в отговор на Hиkoлaй #14

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
Отговор
в отговор на Meндeлeeв #15

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)

Отговор
в отговор на malkia #16

Re: Значи от скоро четеш тоя клуб

Хубав спор стана.

Аз нашия проект като му сложих precomplied headers, скоростта хвръкна, 2,3 пъти намаля времето.
SBR - от тях няма полза. visual assist e 100 пъти по добро и не забавя компилацията.

Целта на STL, Boost е не да пишеш повече код, повече коректни програми. Това са тествани неща, може да ги използваш без проблем (STL поне).

Отговор