eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingszablony metod - deklaracja i definicja › Re: szablony metod - deklaracja i definicja
  • Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!new
    sfeed.neostrada.pl!nemesis.news.neostrada.pl!atlantis.news.neostrada.pl!news.ne
    ostrada.pl!not-for-mail
    From: Tomasz Bywalec <t...@p...dont.spam.me.o2.pl>
    Newsgroups: pl.comp.programming
    Subject: Re: szablony metod - deklaracja i definicja
    Date: Thu, 27 Aug 2009 15:55:07 +0200
    Organization: TP - http://www.tp.pl/
    Lines: 40
    Message-ID: <h763r9$r70$1@nemesis.news.neostrada.pl>
    References: <h741o5$vof$1@news.onet.pl> <h7462k$4vj$1@inews.gazeta.pl>
    <h75on2$kj2$1@news.onet.pl> <h75uui$85l$1@news.onet.pl>
    <h7606u$5st$1@atlantis.news.neostrada.pl> <h760hs$d12$1@news.onet.pl>
    <h761ib$nsj$1@nemesis.news.neostrada.pl> <h761bk$fjh$1@news.onet.pl>
    <h761ch$fn3$1@news.onet.pl> <h761ur$hfu$1@news.onet.pl>
    NNTP-Posting-Host: aemw73.neoplus.adsl.tpnet.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: nemesis.news.neostrada.pl 1251381931 27872 79.191.74.73 (27 Aug 2009
    14:05:31 GMT)
    X-Complaints-To: u...@n...neostrada.pl
    NNTP-Posting-Date: Thu, 27 Aug 2009 14:05:31 +0000 (UTC)
    User-Agent: Thunderbird 2.0.0.23 (Windows/20090812)
    In-Reply-To: <h761ur$hfu$1@news.onet.pl>
    Xref: news-archive.icm.edu.pl pl.comp.programming:183369
    [ ukryj nagłówki ]

    Megas pisze:
    [...]
    >
    > Ciekawe jest to, ze w sytuacji, gdy deklaracje i definicje funkcji
    > szablonowej klasy A umiescilem razem w jednym pliku *.h (projektu *.dll) to
    > wykorzystanie tej funkcji poza projektem *.dll nie stwarzalo zdanych
    > problemów.

    Domyślam się że ten plik .h include'ujesz również w projektach
    korzystających z dll'ki. W takim przypadku kompilator, podczas
    kompilacji programu, zna definicje szablonu i rozwija go,
    niezależnie od tego czy w dll'ce znajdują się skompilowane
    konkretyzacje czy też nie - kompilator na tym etapie nie jest
    w stanie tego "zgadnąć".

    Ale osobiście wydaje mi się teraz, że niepotrzebnie brniemy
    w to rozwiązanie. Skoro chcesz aby w dll'ce znajdowało się
    tylko kilka konkretyzacji szablonu dla kilku typów, jednocześnie
    wyrzucając całą definicję szablonu z pliku nagłówkowego, to i tak
    ograniczasz użycie szablonu do właśnie tych kilku
    typów. W takim razie równie dobrze możesz, zamiast szablonu metody,
    zdefiniować kilka metod (o tej samej nazwie) dla kilku różnych typów
    argumentu. Jeżeli, dla zdefiniowania tych metod, wygodnie Ci jest się
    posłużyć szablonem to możesz go trzymać, najwyżej
    pod inną nazwą, w całości w pliku .cpp, albo zostawić prywatną
    deklarację w .h, a definicję w .cpp. Dodatkowo, programista korzystający
    z tej dll'ki będzie od razu wiedział dla jakich typów zdefiniowana
    jest ta metoda (w każdym razie błąd nastąpi już na etapie kompilacji
    a nie linkowania).

    Natomiast jeżeli chciałbyś jednak aby szablon działał dla różnych
    możliwych typów T to i tak definicja musi trafić do pliku nagłówkowego
    (w praktyce, na większości kompilatorów C++, nie da się tego uniknąć).
    Przypuszczam, że z pomocą "extern templates" (o ile są w Visual C++ ?)
    dałoby się ewentualnie skompilować konkretyzacje kilku typów i
    umieścić je w bibliotece .dll. Pytanie tylko czy naprawdę jest
    to gra warta świeczki ?

    Pozdrawiam,
    Tomek Bywalec

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: