eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingszablony metod - deklaracja i definicjaRe: szablony metod - deklaracja i definicja
  • Data: 2009-08-27 13:01:03
    Temat: Re: szablony metod - deklaracja i definicja
    Od: Tomasz Bywalec <t...@p...dont.spam.me.o2.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie 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: