eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingszablony metod - deklaracja i definicjaRe: 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!atlantis.news.neostrada.pl!news.neostrada.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:01:03 +0200
    Organization: TP - http://www.tp.pl/
    Lines: 85
    Message-ID: <h7606u$5st$1@atlantis.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>
    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: atlantis.news.neostrada.pl 1251378208 6045 79.191.74.73 (27 Aug 2009
    13:03:28 GMT)
    X-Complaints-To: u...@n...neostrada.pl
    NNTP-Posting-Date: Thu, 27 Aug 2009 13:03:28 +0000 (UTC)
    User-Agent: Thunderbird 2.0.0.23 (Windows/20090812)
    In-Reply-To: <h75uui$85l$1@news.onet.pl>
    Xref: news-archive.icm.edu.pl pl.comp.programming:183362
    [ ukryj nagłówki ]

    Megas pisze:
    [...]
    >
    > template void foo<int>();
    >
    > Jaki jest cel ostatniej lini 'template void foo<int>(); ?? i czy mozna to
    > samo zrobic w przypadku funkcji skladowej klasy??
    >

    Ta linijka powoduje że w tym miejscu szablon funkcji foo zostaje
    rozwinięty (skonretyzowany) z parametrem <int> - to znaczy,
    zostanie utworzona "konkretna" wersja funkcji, na podstawie
    szablonu.

    Zrobiłem u siebie mały test - poniższy przykład rozbity jest na 3 pliki,
    u mnie działa, spróbuj może zaadaptować to na potrzeby swojego programu:
    (całość działa u mnie, tyle że na VC++ 2008 EE).

    ==================
    Plik tmp2.hpp
    ==================

    #include <string>

    namespace tmp {

    // Zwyczajna klasa, z jednym szablonem metody.
    class Printer {
    public:
    Printer( const std::string& prefix ) : prefix_( prefix ) {}

    // Deklaracja szablonu metody (bez definicji).
    template <class T> void print_type();

    private:
    std::string prefix_;
    };

    }

    ===================
    Plik tmp2.cpp
    ===================

    #include "tmp2.hpp"
    #include <iostream>

    namespace tmp {

    // Definicja szablonu metody.
    template <class T>
    void Printer::print_type()
    {
    std::cout << prefix_ << ": " << typeid(T).name() << std::endl;
    }

    // Konkretyzacje szablonu dla trzech typow.
    template void Printer::print_type<int>();
    template void Printer::print_type<char>();
    template void Printer::print_type<double>();

    }

    =========================
    Plik tmp2-main.cpp (test)
    =========================

    #include "tmp2.hpp"

    using tmp::Printer;

    int main()
    {
    Printer p1( "aha" );
    p1.print_type<int>();
    p1.print_type<char>();
    p1.print_type<double>();
    // z tym nie dziala (blad kompilacji): p1.print_type<float>();
    // czego oczywiscie nalezalo sie spodziewac.
    }

    ===========================

    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: