Article View: pl.comp.objects
Article #16275Re: Typ należący do parametru template'a (czyli STL w parametrze)
From: ethouris
Date: Tue, 10 Apr 2007 19:08
Date: Tue, 10 Apr 2007 19:08
62 lines
4150 bytes
4150 bytes
On 9 Kwi, 19:47, p...@gazeta.pl (Piotr Dembiński) wrote: > A.L. <f...@2005.com> writes: > > [...] > > > Szablony to zwykly makrogenerator i z obiektowoscia nic zgola > > wspolnego nei maja. > > Programowanie generyczne. Swoją drogą to ciekawie mogłaby wyglądać > biblioteka STL dla ANSI C zrealizowana w oparciu o procesor makr M4. Pomijając już kwestie "makrogeneratorowatości" szablonów C++, o czym nie chce mi się już pisać, bo argumenty panów AL + AK od zawsze w tym temacie były typu "makrogenerator, bo tak" - problem polega na tym, że STL opiera się nie tylko na samych szablonach, ale również np. na przeciążaniu. I tu nie chodzi o to, że mamy np. kilka wersji funkcji transform() z różną ilością argumentów, ale również o dedkukcję typów w przypadku ptr_fun, czy bind2nd. Druga sprawa to specjalizacja szablonu. Nie istnieje taki makrogenerator, który potrafi: a) dedukować parametr b) specjalizować wzorzec wybiórczo Do tych obu rzeczy potrzebne są takie konstrukcje, które pracują bezpośrednio na elementach języka. Makrogenerator nie potrafi, po otrzymaniu 'a', dowiedzieć się, że 'a' jest obiektem typu 'int' i przekazać owo 'int' jako parametr. Makrogenerator nie potrafi również domyślić się, które z części definicji wzorca są używane w miejscu specjalizacji, a które nie. Przykładowo, weźmy takie find_if, zrealizowane jako makro: x = FIND_IF( LIST, ls->head, ls->tail, bool (*)(int), is_divisible_by_3 ); LIST potrzebujemy do tego, żeby mieć nagłówek do zestawu funkcji charakterystycznych (w tym funkcji określającej metodę awansowania iteratora), a typ funkcyjny po to, żeby można było przekazać funkcję is_divisible_by_3. Ja i tak nawet nie mam pewności, czy w tym powyżej jeszcze nie brakuje czegoś dodatkowego. W przypadku prawdziwego STL z C ++ wygląda to oczywiście x = find_if( ls.begin(), ls.end(), is_divisible_by_3 ); Nie wspominając już o tym, że tam nawet nie trzeba definiować osobno funkcji ze specjalizacją argumentu: x = find_if( ls.begin(), ls.end(), bind2nd( is_divisible_by, 3 ) ); STL i tak ma zresztą jeszcze poważny design flaw polegający na tym, że nie należało w algorytmach dawać osobnych argumentów dla początkowego i końcowego iteratora (generalizacja poszła nie w tą stronę, co trzeba). Po uzupełnieniu o wszystkie braki najpewniej przyszła wersja będzie wyglądać tak: x = find_if( ls, bind( is_divisible_by, _1, 3 ) ); I dlatego właśnie nigdy nie powstała biblioteka generyczna oparta na makrach i nigdy takowa nie powstanie. Z prostej przyczyny - nikt by jej po prostu nie używał, bo interfejs takiej biblioteki byłby na tyle koślawy, że każdego by odrzucało.
Technical Details
Message-ID:
<1176232119.821172.37680@n76g2000hsh.googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!feed.news.interia.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!newsfeed00.sul.t-online.de!t-online.de!news.glorb.com!postnews.google.com!n76g2000hsh.googlegroups.com!not-for-mailReferences:
<slrnf1kjcu.ave.lrem@lrem.maxnet><evdlhb$f4p$1@inews.gazeta.pl> <evdqq6$qrs$3@news.onet.pl> <desk13psu2rvekht584uoirc0djahrk1dv@4ax.com> <87irc5fnin.fsf@hector.domek>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!feed.news.interia.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!newsfeed00.sul.t-online.de!t-online.de!news.glorb.com!postnews.google.com!n76g2000hsh.googlegroups.com!not-for-mail From: "ethouris" <ethouris@gmail.com> Newsgroups: pl.comp.objects Subject: Re: Typ należący do parametru template'a (czyli STL w parametrze) Date: 10 Apr 2007 12:08:39 -0700 Organization: http://groups.google.com Lines: 70 Message-ID: <1176232119.821172.37680@n76g2000hsh.googlegroups.com> References: <slrnf1kjcu.ave.lrem@lrem.maxnet><evdlhb$f4p$1@inews.gazeta.pl> <evdqq6$qrs$3@news.onet.pl> <desk13psu2rvekht584uoirc0djahrk1dv@4ax.com> <87irc5fnin.fsf@hector.domek> NNTP-Posting-Host: 81.219.244.75 Mime-Version: 1.0 X-Trace: posting.google.com 1176232120 7433 127.0.0.1 (10 Apr 2007 19:08:40 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Tue, 10 Apr 2007 19:08:40 +0000 (UTC) In-Reply-To: <87irc5fnin.fsf@hector.domek> User-Agent: G2/1.0 X-HTTP-UserAgent: Opera/9.10 (Windows NT 5.0; U; pl),gzip(gfe),gzip(gfe) Complaints-To: groups-abuse@google.com Injection-Info: n76g2000hsh.googlegroups.com; posting-host=81.219.244.75; posting-account=W6788A0AAADjfLYufIDScQB28tLT5-6D Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit