Article View: pl.comp.lang.c
Article #310317Re: Sztuka Kodowania w C++ - Nowa Wersja!
From: heby
Date: Wed, 09 Dec 2020 19:54
Date: Wed, 09 Dec 2020 19:54
60 lines
2927 bytes
2927 bytes
On 09/12/2020 20:25, heby wrote:
> Nikt nie każde robić template inline. Możesz zrobić explicit
> instantiation w pliku cpp.
Podpowiem:
W pliku my_widget.hpp:
template< typename _T >
class MyWidget : public _T
{
public:
void update() override;
}
W pliku my_widget.cpp:
#include "my_widget.hpp"
template< typename _T>
void
MyWidget::update()
{
//coś
}
template class MyWidget< QButton >;
template class MyWidget< QFoo >;
template class MyWidget< QBar >;
[...]
I tyle. Dalsze dziedziczenie w kodzie po MyWidget< QFoo > nie powoduje
przyrostu kodu wykonywalnego. Zystałeś brak wielodziedziczenia,
straciłeś troche miejsca na podobny kod dla róznych widgetów bazowych
(ale tylko bazowych). Kompilator *może* ten kod połaczyć w jedno, więc
może się okazać że nic nie straciłeś.
Zyskałeś również *prawdziwą* możliwość wirtualizacji QFoo, gdzie można
nadpisać wszystko co chcesz. Dodatkowo nic nie stoi na przeszkodzie aby
to ciągnąc dalej:
template< typename _T >
class MyMagicButtonWithFancyBorder : public MyWidget< _T >
{
// common logic
}
class UpButton : MyMagicButtonWithFancyBorder< QButton >
{
}
class DownButton : MyMagicButtonWithFancyBorder< QButton >
{
}
class PlayButton : MyMagicButtonWithFancyBorder< QFooButton >
{
}
itd.
Technical Details
Message-ID:
<rqra2l$1mb$1@dont-email.me>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!news2.arglkargh.de!news.mixmin.net!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mailReferences:
<478ab743-cd00-4961-88e1-983025db304bn@googlegroups.com> <d9830106-c21a-4564-b45f-0766ef86181fn@googlegroups.com> <cdd14123-89b7-4f80-9f2b-865f1038810an@googlegroups.com> <e38a42c4-36d3-49b6-8644-468f65828f4cn@googlegroups.com> <edd1ce6a-46e1-4883-8943-db4a0da8da33n@googlegroups.com> <8d469f13-e697-4488-8adf-29117a3eeb8cn@googlegroups.com> <rqqscj$p0n$1@dont-email.me> <b093aa7a-52ad-414b-b1c5-28d1d94a88d5n@googlegroups.com> <rqr383$gtr$1@dont-email.me> <0ae10656-cdda-4382-a912-d8d7a25a1d4dn@googlegroups.com> <rqr8ak$kp6$1@dont-email.me>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!news2.arglkargh.de!news.mixmin.net!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail From: heby <heby@poczta.onet.pl> Newsgroups: pl.comp.lang.c Subject: Re: Sztuka Kodowania w C++ - Nowa Wersja! Date: Wed, 9 Dec 2020 20:54:59 +0100 Organization: A noiseless patient Spider Lines: 61 Message-ID: <rqra2l$1mb$1@dont-email.me> References: <478ab743-cd00-4961-88e1-983025db304bn@googlegroups.com> <d9830106-c21a-4564-b45f-0766ef86181fn@googlegroups.com> <cdd14123-89b7-4f80-9f2b-865f1038810an@googlegroups.com> <e38a42c4-36d3-49b6-8644-468f65828f4cn@googlegroups.com> <edd1ce6a-46e1-4883-8943-db4a0da8da33n@googlegroups.com> <8d469f13-e697-4488-8adf-29117a3eeb8cn@googlegroups.com> <rqqscj$p0n$1@dont-email.me> <b093aa7a-52ad-414b-b1c5-28d1d94a88d5n@googlegroups.com> <rqr383$gtr$1@dont-email.me> <0ae10656-cdda-4382-a912-d8d7a25a1d4dn@googlegroups.com> <rqr8ak$kp6$1@dont-email.me> Mime-Version: 1.0 Injection-Date: Wed, 9 Dec 2020 19:55:02 -0000 (UTC) Injection-Info: reader02.eternal-september.org; posting-host="c147573f09cc058fb17380c8004c34c7"; logging-data="1739"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+x8qvh1DzMaEwPV3yZDBAD" User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.5.1 Cancel-Lock: sha1:wOkIdvt3PoGlPNB5MaHYFalXxt0= In-Reply-To: <rqr8ak$kp6$1@dont-email.me> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit